华风 发表于 2018-8-31 08:33:44

perl_常用的函数

  这里说的是一些常见的内置函数:
时间函数:
  time;
  返回1970年1月1日起经过的无跳跃秒数。可以用gmtime和localtime函数做进一步的处理。
  times;
  返回一个四个元素的列表,给出当前进程及其子进程用户和系统时间,精确到秒。
  ($user,$system,$cuser,$csystem)=times;
  在标量上下文中,times返回$user.
  localtime EXPER;
  把一个由time函数返回的时间转换成一个9个元素的列表,同时把时间按照本地时区转换
  典型使用如下:
  ##   0    1   2   3    4    5   6   7   8
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
  例如:要取得机器当前时间:
  $time=localtime;
  print $time;
  gmtime EXPR;
  把一个由time函数返回的时间转换成一个8个元素的列表,同时把该时间转换成标准的格林威治时区时间。
  数组函数:
  数组函数列表如下:
  pop         从数组的末尾删除元素          @values=(1,2,8,14);
  $result=pop(@values);#结果是14
  print "@values\n";#1 2 8
  push    从数组的末尾添加元素            @a=qw(a b c d);#@a是abcd
  push@a,e;#@a是abcde
  print "@a\n";
  shift   从数组的开头删除元素            @a=qw(a b c d);#abcd
  shift@a;#bcdprint "@a";
  unshift从数组的开头添加元素             @a=qw(a b c d);#abcd
  unshift(@a,g)#gabcdprint "@a";
  reverse把数组倒序                     @values=qw(a b c E d);
  @back=reverse(@values); #print "@back\n";
  sort      按字典方式排序            @values=qw(a b c E d);
  @art=sort@values      #print "@art\n";
  #实现上面同样目地,但是使用了显式的排序函数@art=sort{$a cmp $b}@values;
  #现在是大小写不敏感(忽略大小写)   @art=sort{uc($a) cmp uc($b)}@values;
  #现在是倒排序                      @art=sort{$b cmp $a}@values;
  #按数字递增方式排序            @art=sort{$a$b}@values;
  #按数字递减方式排序               @art=sort{$b$a}@values;
  #现在使用内联函数按照值而不是关键字的方式排序哈希表%sr
  %a=(
  "www"=>1,
  "eee"=>2,
  );
  @hx=sort{$a{www}$a{eee}}keys%a;
  print "@hx\n";
  map是一种道具,可以让你的函数或者表达式,很方便地施用到一系列对象上去。
  语法:map BLOCK LIST
  map EXPR, LIST
  BLOCK是一个用{}包围的代码块。EXPR可以是子函数名、正则表达式等。LIST是输入列表。
  简单地说,map就是起了一个替代foreach循环的作用,map会把数组LIST中的元素挨个取出,放到系统变量$_中,然后调用BLOCK去 处理。值得强调的是,除非有很特殊的理由,不要去修改$_的值,因为修改$_就是直接改了原始数组里的元素!BLOCK处理过的结果由map返回,仍然是一个数组。
  一个例子:计算一系列文件大小
  my @sizes = map { -s $_ } @filenames;
  在一个例子:将数值转换成字符
  @number=qw(80 101 114 108);
  @characters=map(chr $_, @number); print "@characters\n" 为 Perl
  split 语法:split /PATTERN/,EXPR,LIMIT
  split /PATTERN/,EXPR
  split /PATTERN/
  split
  分割一个字符串成为一个字符串的列表并返回该列表。分隔符是匹配PATTERN的字符串,因此分隔符长度可能大于一。
  一个简单的例子:
  $info="Caine:Michael:Actor:14,Leafy Drive";
  @perlsonal=split(/:/,$info);
  #####@perlsonal=("Caine","Michael","Actor","14,Leafy Drive");
  如果想把列表元素中的前后的空格去掉,可以把中间一行改成:
  @perlsonal=split(/\s*:\s*/,$info);
  缺省情况下,split函数保留开头的空字符串,而删除结尾的空字符串。
  grep语法:
  grep BLOCK LIST
  grepEXPR,LIST
  通常的调用方式是使用一个正则表达式,加上一个数组,但并不局限于此。
  对每个传入数组的元素执行BLOCK或EXPR,然后返回由表达式为真的元素组成的数组。在标量上下文,返回表达式为真的次数。
  例如,要排除注释行:
  @bar=qw(s b c #dd d e);
  print "@bar\n";
  @foo=grep(!/^#/,@bar);
  print "@foo\n";
  结果为:s b c #dd d e
  s b c d e
  或等价的:
  @foo=grep{!/^#/}@bar
  注意:可以通过$_访问数组元素,当然也可以通过他修改数组元素,但是修改同时也反映到原数组中去了。
  scalar返回数组大小。
  @bar=qw(s b c #dd d e);
  print scalar@bar;#结果为6;
  delete清除该元素的位置,但不改变各元素的位置。
  @bar=qw(s b c #dd d e);
  delete $bar;
  print join(':',@bar);   #结果为s:b:c::d:e
  exists判断该元素是否已被删除。
  @bar=qw(s b c #dd d e);
  delete $bar;
  print join(':',@bar),"\n" unless exists $bar;#结果s:b:c::d:e;如果没有删除就不打印东西了。
  注意:它不同于判断该元素是否undef;
  @bar=qw(s b c #dd d e);
  undef $bar;
  print "exists\n" if exists $bar;      结果为:exists
  splice清除该元素的位置。
  @bar=qw(s b c #dd d e);
  splice(@bar,3,1);
  print join(':',@bar),"\n";   #结果为:s:b:c:d:e
  undef 让数组变成空白。
  chop每一个元素去掉最后一个字符
  @bar=qw(s b c #dd d e);
  chop(@bar);
  print join(':',@bar),"\n"; #结果为::::#d::
  chomp去掉每一个元素尾部的换行符
  比较数组是否相等:
  use Array:compare;
  @arr1=0..10;
  @arr2=0..10;
  my $compl=Array::Compare->new;
  if($compl->compare(\@arr1,@arr2)){
  print "数组是相等的\n";
  }else{
  print "数组是不同的\n";
  }
  哈希表
  Perl中的哈希表(Hash)用来存储关键字——值对。有的也把它叫做关联数组。哈希表相关的函数列表如下:
  keys      返回一个键值的数组。
  $ranks{aa}=1;
  $ranks{bb}=2;
  @teams=keys(%ranks);
  print "@teams\n";   #结果teams(aa,bb)或(bb,aa)
  values   返回一个值的数组。###用法和上面的一样
  each       返回一个“关键字——值”对。随后的调用返回剩下的“关键字——值”对,可用这个函数来遍历hash。
  $ranks{aa}=1;
  $ranks{bb}=2;
  while(($team,$rank)=each(%ranks)){
  print ("Ranking for $team is $rank\n");
  }#结果为    Ranking for bb is 2
  Ranking for aa is 1
  delete    从hash删除一个“关键字——值”对,返回被删除的元素的值。
  $ranks{aa}=1;
  $ranks{bb}=2;
  $x=delete $ranks{"aa"};#现在%ranks仅剩一个"关键字---值"对了.
  print ("$x\n"); #$x是1
  exists    判断该元素是否已被删除。
  $ranks{aa}=1;
  $ranks{bb}=2;
  print ("存在\n")if exists $ranks{aa}; #打印出"存在"。

页: [1]
查看完整版本: perl_常用的函数