这里说的是一些常见的内置函数:

时间函数:

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;#bcd  print "@a";

unshift  从数组的开头添加元素             @a=qw(a b c d);#abcd

                                           unshift(@a,g)#gabcd  print "@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

        grep  EXPR,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[3];
        print join(':',@bar);   #结果为s:b:c::d:e

exists  判断该元素是否已被删除。

        @bar=qw(s b c #dd d e);
         delete $bar[3];
         print join(':',@bar),"\n" unless exists $bar[3];  #结果s:b:c::d:e;如果没有删除就不打印东西了。

注意:它不同于判断该元素是否undef;

@bar=qw(s b c #dd d e);
undef $bar[3];
print "exists\n" if exists $bar[3];      结果为: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}; #打印出"存在"。