perl笔记

前端之家收集整理的这篇文章主要介绍了perl笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

/*

所有笔记都是根据个人对某知识点了解程度而做适当记录,以备复习。不是针对某知识点系统记录、讲解。

*/


1、last相当于break        next相当于continue


2、“真”的定义
    A、未定义的变量为false
    B、空字符创为false
    C、值为0为false
    D、其他情况为真
    
3、defined函数测试变量是否有某个值。

4、简单关系运算符
    ==        eq
    !=        ne
    <        lt
    <=        le
    >        gt
    >=        ge
    

5、十六进制表时必须用0x,而不能用0X。(x的大小写区别)

6、perl允许在数字中使用下划线 eg:1_333_258

7、在双引号中分离变量,可使用{}

8、perl运算符:
    .    字符串串联    eg: $full_name = $first." ".$last
    **    幂        eg: $div = 12**2
    x    重复        eg: $no = "no" x 3
    
9、open如果打开成功,返回true,否则返回undef

10、从文件读入空行时,读入的是\n,而不是“”

11、在线文档
    perldoc -f chomp
    perldoc -f defined
    perldoc perlsyn    #基本语法信息
    perldoc perllop #关于perl运算符的信息
    
12、决定数组中的元素个数:$#array
    注意注意:表达式$#array返回的是数组的最后元素的索引。对于单元素数组,$#array 返回0. 对于空数组,$#array返回-1.
    
    eg:for(my $index = 0; $index <= $#array; $index++); 使用 <= 而不是 <
    
13、带有“黑洞”的数组
    my @array = (1); $array[3] = 100;    
    @array元素为(1,undef,100);

14、引用词常犯错误
    my @name = qw(xin lang shen zhen); #qw列表中不能有逗号
    
15、操纵数组结尾
    push(@array,1);            #数组结尾插入1
    $last_element = pop(@array);    #pop数组最后一元素
    
    $first_element = shit(@array);    #pop数组第一个元素
    unshit(@array,1);        #数组开头插入1元素

16、处理数组的一部分:
    A、使用一套索引:
        @array[0,$#array] = (-1,-1); #将数组的第一个元素和最后一个元素赋值为-1
        @array = qw(1 2 3 4); @new_array = @array[0,3];#@new_array 元素为1、4
    
    B、范围运算符:
        @array[0..9] = ((0) x 10); #@array头10个元素被赋值为0
        
17、splice函数
    A、splice @array,$offset;    #删除数组中元素,从offset开始一直到数组结尾,如果 $offset 为负数,则从数组末尾开始数元素
    B、splice @array,$offset,$length;    #length 为删除的数组个数
    C、splice @array,$length,REPLACEMENTS; #REPLACEMENTS可以是标量列表或者是数组表达式

18、split函数
    my $record = "xin:lang:love:shen:zhen";
    my @split = split /:/,$record;    #以 : 分割 $record    采用//是因为它是一个正则表达式
    结果为:@split = qw(xin lang love shen zhen);

19、join 函数:作用与 split 相反:

    $result = join("***",@array);#将@array元素用***联合起来

20、正则表达式元素     ^    匹配行的起始     \s    匹配空白字符     \d    匹配一个数字     *?    重复0或多次,但尽少量的匹配      21、    perldoc perlre        perl关于正则表达式的在线文档     perldoc perlop        perl的运算符(如s///运算)的文档     perldoc perldebguts    关于perl内部的调试信息      22、    foreach $element (@array){}     注意:$element实际上是一个对数组元素的引用,对$element的改变就是对@array的改变      23、文件测试运算符     -f    是否为一个普通文件     -r    文件可读     -w    文件可写     -x    文件可执行     -d    文件为一个目录          可用 perldoc -f -r 查询,即把文件测试运算符当函数 24、redo运算符     读入一个名字列表,并将它们保存在一个数组中,如果用户输入空行,则重新输入。     for(my $index = 1; $index < 10; $index++){         print "Enter name number $index:";         my $result = <STDIN>;         chomp($result);                  #如果用户输入一个空行,则再给一次机会         if($result eq ""){             redo;         }                  $name_list[$index-1] = $result;     } 25、翻译运算符 tr     $hex =~ tr/!@#/123/;     如果 $hex 为Q!W@E#,则其结果为Q1W2E3. 26、unless 等价于 if not 27、__DATA__文件     这个指令告诉perl后面的内容不是脚本的一部分,而是在脚本中用于数据的一个特殊位置,它可以使用<DATA>文件句柄按一个普通文件来读。     eg:     use strict;     use warnings;     while(<DATA>){         print;     }          __DATA__     Hello,I am doing a test.          结果输出:Hello,I am doing a test.      28、<>文件定义:     * 如果在 @ARGV 中有一个参数,则<>将每个参数当做一个文件名,并按顺序读入;     * 如果 @ARGV 为空,则<>读取标准输入。          eg:     程序清单 Ques28.pl     ----------------------------------     use strict;     use warnings;          my $line;     while($line = <>){         print $line;     }     ----------------------------------     然后按下面指令来运行:perl Quse28.pl test1.txt test2.txt     结果:将test1.txt test2.txt两个脚本的内容输出 =====================散列、引用和复杂数据结构================== 29、散列初始化之一:     my %fix_words = (         beleive => "believe",        admimstration => "administration",        skool => "school"     ); 30、遍历散列     foreach my $cur_key(sort keys %fix_words){         print "$cur_key:$fix_words{$cur_key}\n";     } 31、     ================code start================     use strict;     use warnings;          my @array = qw!xin ling ye wu!;     my %my_hash;     %my_hash = map +($_ => 1),@array;     foreach (sort keys %my_hash){         print "$_ => $my_hash{$_}\n";     }     ================code end==================     解析:    map函数一般形式:         map expression,array;#对array中的每个元素进行expression操作         为什么 map后面出现 +(加号)?,这是告诉 map,其有两个参数,分别为$_ => 1 和 @array,否则map将误认为自己只有一个参数,即 $_ => 1.其他的自己琢磨      32、散列元素删除     delete $hash{$key}; 33、散列和数组可以相互赋值     my %hash =(         sam => 45,        joe => 57,        mac => 68     );          my @array = %hash;     @array 元素为sam 45 joe 57 mac 68.注意:顺序可能不一样,因为在散列中没有定义键顺序。      34、引用(用反斜杠表示 \)     my $var = 1;     my $ref = \$var;     $$ref = 2;     print $var;#值为2     #注意:应用被引用的实际标量,需要再添加一个$,即$$ref。          #数组引用:     my @array = qw(red white blue);     my $ref = \@array;     $$ref[$#$ref];#最后一个元素 35、散列的引用     ================= code start===============     use strict;     use warnings;     my $ref = {xin=>23,ling=>24,ye=>28};     print $$ref{xin};#注意两个$$     ================= code end================= 36、数组的引用     my @array = qw(xin lang shen zhen);     $ref = [@array];#方括号用于创建一个数组的拷贝,并返回一个对它的引用     $$ref[1] = "test";     print "@array\n";#输出 xin lang shen zhen     print $$ref[0]."\n";#xin     print $$ref[1]."\n";#test     print $$ref[2]."\n";#shen     print $$ref[3]."\n";#zhen          ###############################3          $ref = \@array;     $$ref[1] = "test";#对array的完全引用     print @array;#xin test shen zhen          my $ref = ["red","white","black"];#匿名引用的其他方法 37、散列放到数组里     my @hash_array;     $hash_array[0] = {xin=>24,ling=>25};     $hash_array[1] = {shenzhen=>perfect,guangzhou=>good};          print $hash_array[0]{xin};    #24     print $hash_array[1]{guangzhou};#good 38、打印复杂数据结构     require "dumpvar.pl"#放在程序顶部的附近,放在use行后面     dumoValue(reference);#调用,如dumpValue(\@array);          ================= code start===============     use strict;     use warnings;     require "dumpvar.pl";          my @matrix = (         [qw(xin lang)],        [qw(ling xi mei)],        [qw(live in shen zhen ping zhou)]     );          dumpValue(\@matrix);     ================= code end=================     result:     0  ARRAY(0x85de1c)        0  'xin'        1  'lang'     1  ARRAY(0x85de8c)        0  'ling'        1  'xi'        2  'mei'     2  ARRAY(0x1d28f34)        0  'live'        1  'in'        2  'shen'        3  'zhen'        4  'ping'        5  'zhou' 39、code test     ================= code start===============     use strict;     use warnings;     require "dumpvar.pl";          my @matrix = (         [qw(xin lang work in zhong ruan guo ji)],        [qw(live in shen zhen ping zhou)],    );          print '$#matrix:'.$#matrix."\n";        #行数         print '$#{matrix[0]}:'.$#{$matrix[0]}."\n";    #列数     print '$#{matrix[1]}:'.$#{$matrix[1]}."\n";     print '$#{matrix[2]}:'.$#{$matrix[2]}."\n";     ================= code end=================     result:     $#matrix:2     $#{matrix[0]}:7     $#{matrix[1]}:2     $#{matrix[2]}:5 40、my @new_array = @old_array;#引用被复制,而数据没被复制,对@new_array的修改就是对@old_array修改     考虑使用 Storable 模块,函数 dclone 克隆一个复杂的数据结构,生成一个所有引用的拷贝。它带有一个参数,一个对即将克隆数据的引用,并返回一个对数据拷贝的引用。     ================= code start===============     use strict;     use warnings;     require "dumpvar.pl";          use Storable qw(dclone);          my @old_array = qw(hua wei in shen zhen);     my $new_array_ref = dclone(\@old_array);     print "@old_array\n";     dumpValue($new_array_ref);     ================= code end=================     result:     hua wei in shen zhen     0  'hua'     1  'wei'     2  'in'     3  'shen'     4  'zhen' 41、在线文档     perldoc perdata #关于perl数据结构的信息     模块:     Storable #保存和从文件读取复杂数据结构的perl模块     dumpvar.pl #一个用于倾倒变量未编进文档的模块 =====================子程序和模块================== 42、参数定义字符     $    标量     \@    数组(转换成引用)     \%    散列(转换成引用)     &    函数引用     @    数组(必须为最后一个)     %    散列(必须为最后一个)     ;    表示后面是可选参数 43、其他参数传递方法     sub distance($$$$){         my ($x1,$x2,$x3,$x4) = @_;     }          无参数定义的函数:如sub do_it{},这告诉perl函数带有任何类型的任何数量的参数。换句话说,绝对不进行类型检查。也没有数组到数组引用或散列到散列引用的自动转换发生,所有参数都被串联到一起,倾倒入@_.避免使用这种形式的参数传递。 44、local声明的作用:     @@@:保存变量的全局定义     @@@:允许你随意改变变量     @@@:当局部变量越出作用域时,它就恢复全局定义          my才是创建局部变量,local不是。     ================= code start===============     print "$#ARGV arguments present\n";     {         local @ARGV;         my $first = shift @ARGV;         print "$#ARGV arguments present now\n";     }     print "$#ARGV arguments restored\n";     ================= code end=================     等价于:     ================= code start===============     print "$#ARGV arguments present\n";     my @save_argv = @ARGV;     {         my $first = shift @ARGV;         print "$#ARGV arguments present now\n";     }     @ARGV = @save_argv;     print "$#ARGV arguments restored\n";     ================= code end=================

猜你在找的Perl相关文章