Perl学习

1. 第一个程序:

#!/usr/bin/perl

print "hello world.\n";

 

2. 第二个程序

#!/usr/bin/perl

use 5.010; #告诉perl要使用5.010版本的新特性

say "hello world."; #与print效果一样,只是不需要“\n”即可换行

 

3. 使用变量前不需要定义

 

4. 第三个程序

#!/usr/bin/perl
#
@lines = `perldoc -u -f atan2`; #用倒引号调用外部程序,输出的结果会一行行地存储在@lines这个数组变量中。
foreach (@lines) {
s/\w<([^>]+)>/\U$1/g;
print;
}

 

5. 在 Perl 中,不管是数字还是字符串都用标量(scalar)来存储,一个标量变量以 $ 开头。Perl是通过操作符来识别变量是数字还是字符串。

 

6. 字符串操作

   6.1 "aaa"."bbb"

   6.2 "aaa" x 4 #aaa重复4次

 

7. 标量变量

  以$开头

8. 比较操作符

比较      数字    字符串

相等      ==     eq

不等      !=    ne

小于      <     lt

大于      >     gt

小于或等于    <=     le

大于或等于    >=     ge

 

9. if语句

  if () {

  } else {

  } #一定要有{},哪怕只有一个语句

 

10. 获取用户输入

  $text = <STDIN> #获取用户输入

  chomp($text) 或 chomp $text #去掉"\n"

 

11. while 语句

  $count = 0;

  while ($count < 10) {

    $count += 2;

    print "$count\n";

  }

 

12. undef值 

  如查一个变量没有被赋值,那么它的值是undef,表示什么也没有。

  $line = <STDIN>;

  if (defined($line) ) #如果$line是undef,返回假 {

    print "$line\n"

  }

 

13. 列表与数组

  列表是指标量的有序集合,数组是存储列表的变量。

  13.1 访问数组

    $array[0] = 0;

    $#array 比数组大小小1,因为数组下标是从0开始。

    $array[-1] 表示最后一个元素

  13.2 列表直接量

    (1,2,3)

    (1..5)与 (1,2,3,4,5)等价

    (1, “abc”)列表中可以有任何标量值

  13.3 qw简写

    qouted word 这种写法可以减少引号与逗号输入次数。

    qw( abc def ghi)

  13.4 pop 和 push 操作

    @array  = 5..9;      #定义数组(5,6,7,8,9)

    $fred   = pop(@array);  #fred等于9 array变成(5,6,7,8)

      

    push(@array, 0);==》push @array, 0; #向数组添加一个数

    push @array, 1..10; #向数组添加一个数组

    @others = qw(1 2 3);

    push @array, @others;

  13.5 shift 和 unshift

    pop与push处理的数组尾部,而shift与unshift处理的数组开头。

  13.6 splice 操作符

    其最多可以有4个参数,其使用方法如下:

    示例1 :

    @array = qw (1 2 3 4);

    @removed = splice @array, 2;#array 等于(1,2),removed等于(3,4)。

    示例2 :

    @array = qw (1 2 3 4);

    @removed = splice @array, 2, 1; #array equals (1 2 4), remove equals (3).

    示例3 :不只删除,还可以添加,如果第三个参数为0,则只添加不删除。

     @array = qw (1 2 3 4);

     @removed = splice @array,2,1,@array1;

  13.7 foreach控制结构

    $_变量

    foreach (1..10) {

      say $_;

    }

  13.8 reverse操作符

    reverse @array; #反转array数组。

  13.9 chomp

    

  13.10 sort操作符可以对数组进行排序

  13.11 each 操作符

    返回数组的值与索引。

    while ( my($index, $value) = each @array ) {

      say "$index: $value";

    }

  13.12 $#array,表示数组的大小。

  13.13 去掉一行行首与行尾的空格 :    

     my $str = " xyj";
     $str =~ s/^\s+|\s+$//g;
     print $str;
     print "\n" ;

    或

    先去掉前面的: $a=~s/^ +//; 

    在去掉后面的: $a=~s/ +$//;

14 子程序

  14.1 定义子程序

    sub marine {

    }

  14.2 调用子程序

    &marine;

  14.3 返回值

    最后一次的运算结果会被当作子程序的返回值。

  14.4 子程序的参数

    @_   是一个数组,@_[0]表示第一个参数。

  14.5 子程序的私有变量

    perl脚本里,所有的变量都是全局的,但可以my($m, $n)定义私有变量。

    通常会这样用:my($m,$n) = @_

  14.6 变长参数列表

    if (@_ != 2)  可以判断参数的长度。

  14.7 return操作符

    如果子程序执行到一半想退出,那么就可以用return,return后面可以有返回值。

  14.8 子程序的调用方式

    &chomp;   或  chomp(1,2);

15 输入输出

  15.1 <STDIN>

  15.2 钻石操作符

    while (<>) {

      chomp;

      print "$_\n";

    } 这段代码可以打开以文件名作为脚本参数的文件,并打印每一行。

  15.3 脚本是如何获取参数的

    @ARGV

    foreach (@ARGV) {

      print "$_\n"

    }

  15.4 输出到标准输出

    print <>   相当于cat命令

    print sort <> 相当于sort命令

  15.5 格式化输出

    printf

  15.6 文件句柄

    open CONFIG, 'dino';

    open CONFIG, '<dino';

    open CONFIG, '>dino';

    open CONFIG, '>>dino';

    打开文件句柄后,就可以像STDIN一样使用了。

    print CONFIG "out put.\n";

    关闭文件句柄 close CONFIG

  15.7 die操作符

    if ( ! open LOG, '>>', 'logfile' ) {

      die "cannot create logfile: $!"

    $!表示错误码。

 

    die 会终止程序的运行,并且会把程序名和行号附加在错误信息的后面。

  15.8 autodie

    use autodie;

    自己不必写die语句,如果有致命错误发生,脚本会自动调用die。

  15.9 改变默认的文件输出句柄

    select 句柄   #但记得之后恢复默认句柄    

    if ( ! open LOG, '>>', 'logfile' ) {

      die "cannot create logfile: $!";

    }

    while ( <LOG> ) {

    }

    或

    select LOG;#会改变默认句柄。

    $| = 1 #相当于做了sync操作。

    或  print 句柄 “abc”

  15.10 句柄可以存在标量中

    open $jubing , 文件 

16. 哈希

  16.1 访问哈希元素

    $hash{$key}

  16.2 赋值

    my %hash = {

        abc => "123",

        def => "456",

    };

  16.3 哈希函数

    16.3.1 kes 和 values

      my %hash = ('a' => 1, 'b'=>2, 'c'=>3);

      my @k = keys %hash;

      my @v = values %hash;

      注:在标量上下文中,这两个函数返回键值对的个数,$k = keys %hash

    16.3.1 each函数

      while ( ($key, $value) = each %hash ) {

        say "$key => $value";

      }

    16.3.2 exists函数

      查看某个键对应的值是否存在。

      if (exists $books{"key"}) {

      }   

    16.3.4 delete函数

      删除hash中key对应的值。

  17 正则表达式

    17.1 在perl语言中使用正则表达式

      m 定界符 正是表达式 定界符   如: m(a*b)<=> /a*b/

      注:定界符不唯一。

    17.2 大小写无关匹配

      chomp($_ = <STDIN>);

      if (/yes/i) {

      }

    17.3 匹配任意字符

      默认情况下点号无法匹配换行符,/patten/s,即可匹配任意字符。

    17.4 用/x加入空白符

      /patten/x #其中patten可以有空格

      这样就可以写出如上面的匹配形式,如果真的想要匹配空符的时候,可以用转意(\t或\s)。 

    17.5 锚位

      绝对开头 /Ahttp:*/

      绝对结尾/.png/z

    17.6 整词匹配

      /\babcdefg\b/

    17.7 绑定操作符 =~

      默认情况下模式匹配的操作对象是$_

      $some_other =~ /patten/s;

    17.8 模式中的内插

      也就是patten可以为一个变量。

      my $what = "pattern";

      if (/\A($what)/) { # 模式的锚位被定在字符串的开头。

      }

    17.9 示例

      $_ = "Hello there, neighbor";

      if (/\s(\[a-zA-Z],/) {

        print "the word was $1\n";

      }

      $1表示匹配到的结果。这里$1等于“hello,”,不包括空格,也不包括逗号,且只匹配一个,即使后面还有可以匹配的单词也不会再匹配。

      $_ = "Hello there, neighbor";

      if (/(\S+) (\S+), (\S+)/) {

        print "$1 $2 $3\n";

      }

      这个例子可以匹配三个单词。

      其实$1 $2 $3变量对应的是圆括号内的匹配模式。默认情况下圆括号内的匹配结果都是要存在$1这样的变量中的,但可以禁止:(?:pattern)

 

      但$1这种形式不好记,还可以将匹配结果放进哈希表内。

      my $names = 'Fred or Barney';

      if ( $names =~ m/(?<name1>\w+) (?:and|or) (?<name2>\w+ ) {

        say "I saw $+{name1} and $+{name2}";

      }

    17.10 split操作符

      my @fields = split /separator/, $string;

      my @fields = split; #它会省略开头的空字段,并以空字段分隔字符串。

    17.11 join函数

      my $x = join ":", 4, 6, 8, 10;

  18 last操作符 与c语言中的 break等价

  19 next操作符与c语言中的continue等价

  20 redo操作符,回到循环的顶端

  21 条件操作符

    expresion ? == : ==;

  22 逻辑操作符

    与&& 或|| 非

posted @ 2015-12-07 20:45  jawfeng  阅读(626)  评论(0编辑  收藏