总结:

  • q()、qq()、qw(同单引号)、qx{牢记是花括号},分别是单引号、双引号、创建字符串列表 和 捕获命令输出。
  •  

    第9学时 其他函数和运算符

    一件事情可以使用多种方法完成。

    有哪些其他的函数和运算符?

    index()、rindex()、substr()、tr///、printf()、堆栈:push()、pop()、shift()、unshift()。splice()。

    本节主要内容:

  • 对标量进行字符串搜索(之前用正则表达式)
  • 字符替换
  • print函数
  • 数组作为堆栈和队列
  • 如何在一个标量中搜索字符串?

    index函数从左边开始找,0即是最左边的字符,没有找到则返回-1,被搜索的字符串可以是标量或表达式。

    #函数可以没有括号,但参数之间必须有逗号。
    index "Ring around the rosy", "around";
    index("Pocket full of posies", "ket");
    $a="Ashes, ashes, we all fall down";
    index($a, "she");
    @a=qw(oats peas beans);
    index join(" ", @a), "peas";
    #可以设置搜索的起始位置
    index($reindeer, "da", 1);
    #可以遍历,找到子字符串的所有位置
    $source="One fish, two fish, red fish, blue fish.";
    $start=0;
    #设置搜索起始位置,使用循环更新下次搜索位置,本质就是一个迭代
    while(($start=index($source, "fish", $start)) != -1){
    print "Found a fish at $start\n";
    $start++;
    }

    用rindex向后搜索

    $a="She loves you yeah, yeah, yeah.";
    rindex($a, "yeah");
    rindex($a, "yeah", 25);

    用substr分割标量

    从起始位置offset开始,向前或向后取length个字符(没有length就取到结尾)。

    $a="I do not like green eggs and ham";
    print substr($a, 25);
    print substr($a, 14, 5);
    #可以利用substr函数进行标量的部分替换
    substr($a, 0, 3) = "li";
    #$a中的0到3,被替换为“li”

    翻译运算符(转换运算符) 类似s/pattern/replacement/,有时会用到连接运算符(=~)

    #与s///不同,tr是分别翻译,A翻译为X,之后同理
    $r=~tr/ABC/XYZ/;

    格式化输出 printf函数

    #默认是输出到STDOUT文件句柄
    #逗号放在哪是门学问,句柄后不能有逗号,参数间必须有逗号
    printf formatstring, list;
    printf filehandle formatstring, list;

    %域说明符,(%-w.dx)

    w是总宽度,d是小数点左边的位数(for数字)或总宽度(for字符串),x是数据类型。其中%和x必不可少。

    printf("%20s", "Jack");
    $amt=7.12;
    printf("%6.2f", $amt);
    printf("%c", 65);

     

    堆栈形式的列表

    将横向数组设想为一个纵向堆栈。

    顶部:push函数压入栈顶;pop函数弹出栈顶元素

    底部:shift函数添加底部;unshift函数从底部取出元素

    (注意:一次只能删除一个元素;但是一次可以添加一个数组和列表)(没有指定堆栈,默认操作 @_ 或 @ARGV)

    #堆栈的底部是元素0,堆栈的顶部是数组中最后一个元素
    @band=qw(trombone);
    push @band, qw(li zhi); $brass=shift @band; #取出栈尾元素,即第一个元素
    $wind=pop @band; #弹出数组最后元素,即栈顶 unshift @band, "harmonica"; #添加

    splice函数操作数组

    splice array, offset, length, list; #其中length和list可以不写

    splice函数用于删除指定元素,length指定长度,list则是替换的数组。

     

    第10学时 文件与目录


  • 获得目录列表
  • 创建和删除文件
  • 创建和删除目录
  • 获取文件信息
  • 有哪些函数?

    opendir()、readdir()、closedir()、grep()、glob()、cwd()、chdir()、mkdir()、rmdir()、unlink()、rename()、stat。

    如何获得目录列表?(打开目录 读取目录) 此步的局限性:只能查看指定目录下的文件目录列表信息

    打开文件 和 打开目录 不太一样,打开目录 是为了获得目录里的信息列表,而不能写入或修改。

    # 打开目录
    opendir(DIR, './') or die $!;
    # 以标量形式读取目录
    while(readdir(DIR)){
    print $_."\n";
    }
    # 以数组形式读取目录
    @dir = readdir(DIR);
    foreach (@dir){
    print $_."\n";
    }
    # 目录句柄用完之后必须关闭
    close(DIR);
    # 通常会用grep过滤掉(.)和(..)目录
    @files = grep(!/^\.\.?$/, readdir(DIR));

     

    如何浏览目录、切换目录、创建目录、删除目录?

    如何读取子目录?

    # 使用Cwd包,获取当前工作目录
    use Cwd;
    print cwd, "\n";
    chdir '../' or warn $!; # 改变当前目录
    print getcwd;
    print "DIrectory to create?";
    my $newdir = <STDIN>;
    chomp $newdir;
    mkdir($newdir, 0755) or die $!; # 创建目录,权限为755
    rmdir($newdir) or die $!; #删除目录

    如何删除文件?给文件改名?

    unlink <*.bat>;  #删除匹配文件
    $erased = unlink 'old.exe', 'a.out', 'personal.txt'; #删除列表文件,并返回已删除数量
    unlink @badfiles; #删除列表内文件
    unlink; #删除$_内文件
    if (!rename "myfile.txt", "archive.txt"){
    warn $!;
    }

     

    第11学时 系统之间的互操作性


  • system()函数
  • 捕获输出
  • 可移植性
  • 有哪些内容?

    system()、(>)、(|)、(&)、(``)、qx{}、use strict、$^O。

    system()函数用法与open()相反,成功返回0,错误返回非零值。(不能用or来输出异常)

    system("dir");

    perl会调用shell或command,所以支持命令的重定向(>),管道(|) 和 后台操作任务(&)。

    system("dir > faqfile.txt");
    system("sort $f | less");
    system("Xterm &");

     

    system()函数无法捕获命令输出,绕圈子的做法是:

    system("dir > outfile");
    open(OF, "outfile") or die $!;
    @data = <OF>;
    close(OF);
    foreach(@data){
    print "$_\n";
    }

    perl中专门捕获输出的语法:(结果可以赋给标量,也可以赋给列表)

    $directory = `dir`;
    $directory_2 = qx{dir};
    print $directory;
    @dir = `dir`;
    foreach (@dir){
    print "$_"
    }

    管道

    dir > outfile;
    sort outfile > newfile;
    more newfile; dir | sort | more;

     

    第12学时 使用P e r l 的命令行工具


     

     

     

     

     

     

     

    第13学时 引用与结构


     

     

     

     

     

     

    第14学时 使用模块


    perl的核心特性体现在:正则表达式 和 外部程序接口。

  • 如何使用模块
  • 内置模块
  • 核心模块列表
  •  

     

     

     

     

     

    第15学时 了解程序的运行性能


     

     

     

     

     

    第16学时 P e r l 语言开发界


     

     

     

     

     

     

     

    其他:

    use Cwd 'abs_path';   #获取指定文件和目录的绝对地址
    use warnings;
    $myfile= "fastq_R1.txt";
    $mydir="./1";
    print(abs_path($myfile)."\n"); #使用abs_path函数
    print(abs_path($0)."\n");
    print(abs_path($mydir)."\n");

    以下是语法在只读模式打开file.txt的。这里小于< signe 指示,文件必须以只读模式运行结束

    open(DATA, "<file.txt");

     

    参考资料:

    Perl范围变量声明: my,our,local

    perl一次读取多行并按条件输出
    perl split()函数详解
    notepad++正则表达式
     
     
    
    
     

    Perl 语法 - 高级特性的更多相关文章

    1. Perl 语法 - 基础

      perl语言的核心是正则表达式,在文本处理上非常有优势,与python类似,但语法不同,perl的语法很灵活,用多了才会觉得好用. 常用知识点总结: perl语法类似于C语言(perl源于Unix), ...

    2. Python的高级特性7:闭包和装饰器

      本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

    3. (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

      本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...

    4. 《深入理解Java虚拟机:JVM高级特性与最佳实践》【PDF】下载

      <深入理解Java虚拟机:JVM高级特性与最佳实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062566 内容简介 作为一位 ...

    5. python函数高级特性

      掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

    6. Redis进阶实践之五Redis的高级特性

      一.引言    上一篇文章写了Redis的特征,使用场景,同时也介绍了Redis的基本数据类型,redis的数据类型是操作redis的基础,这个必须好好的掌握.今天我们开始介绍一些Redis的高级特性 ...

    7. Python进阶:全面解读高级特性之切片!

      导读:切片系列文章连续写了三篇,本文是对它们做的汇总.为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔 ...

    8. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

      Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

    9. Redis基础用法、高级特性与性能调优以及缓存穿透等分析

       一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...

    随机推荐

    1. SharePoint自动化系列——Add/Remove "Record" from items

      转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 目的:批量的将SharePoint items变成records或者将records变成普通的it ...

    2. php使用 set_include_path

      通过set_include_path引用home/lib/image.func.php 1.创建include.php 2.添加如下代码 3.在需要引用的文件中包含include.php文件 < ...

    3. 2016年11月11日 星期五 --出埃及记 Exodus 20:2

      2016年11月11日 星期五 --出埃及记 Exodus 20:2 "I am the LORD your God, who brought you out of Egypt, out o ...

    4. ClassLoader加载

      摘自:http://blog.csdn.net/moreevan/article/details/6654781

    5. Windows7下安装搭建Ngnix教程

      简介: Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器. Nginx 是由 Igor Syso ...

    6. 3.求m+mm+mmm+…+m…m(n个)的和,其中m为1~9之间的整数。 例如,当m=3、n=4时,求3+33+333+3333的和。

      package a; public class QiuHe { private int m; private int n; public int getM() { return m; } public ...

    7. LuaTinker的bug和缺陷

      LuaTinker的bug和缺陷 LuaTinker是一套还不错的C++代码和Lua代码的绑定库,作者是韩国人Kwon-il Lee,作者应该是参考了LuaBind后,为了简化和避免过重而实现的.其官 ...

    8. Windows Live Writer代码高亮插件对比

      一.Paste ASVisual Studio Code 参考:http://www.cnblogs.com/mikelij/archive/2010/11/13/1876199.html 插件下载: ...

    9. 搭建本地的git仓库

      折腾了快一天了,终于搭建成功了. 分享一下搭建的步骤: 一.GIT仓库的创建 1. adduser git 2. passwd git 此例设置git的密码为123456 3. cd /home/gi ...

    10. Django.template框架 template context (非常详细)

      前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的 这会导致几个问题: 1,显然,任何页面的改动会牵扯到Python代码的改动 网站的设计改动会比Python代码改 ...