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 "@valuesn";#1 2 8 push??? 从数组的末尾添加元素????????????? @a=qw(a b c d);#@a是abcd ????????????????????????????????????????? push@a,e;#@a是abcde ????????????????????????????????????????? print "@an"; 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 "@backn"; sort??????? 按字典方式排序????????????? @values=qw(a b c E d); ???????????????????????????????????????? @art=sort@values????? #print "@artn"; #实现上面同样目地,但是使用了显式的排序函数@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=( ??????????????????????????????????? @hx=sort{$a{www}<=>$a{eee}}keys%a; map? 是一种道具,可以让你的函数或者表达式,很方便地施用到一系列对象上去。 ???? 语法:map BLOCK 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 "@charactersn" 为 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); 结果为:s b c #dd d e 或等价的: @foo=grep{!/^#/}@bar 注意:可以通过$_访问数组元素,当然也可以通过他修改数组元素,但是修改同时也反映到原数组中去了。 scalar? 返回数组大小。 ?????? @bar=qw(s b c #dd d e); delete? 清除该元素的位置,但不改变各元素的位置。 ??????? @bar=qw(s b c #dd d e); exists? 判断该元素是否已被删除。 ??????? @bar=qw(s b c #dd d e); 注意:它不同于判断该元素是否undef; @bar=qw(s b c #dd d e); splice? 清除该元素的位置。 ?????? @bar=qw(s b c #dd d e); undef 让数组变成空白。 chop? 每一个元素去掉最后一个字符 @bar=qw(s b c #dd d e); chomp? 去掉每一个元素尾部的换行符 比较数组是否相等: use Array:compare; 哈希表 Perl中的哈希表(Hash)用来存储关键字——值对。有的也把它叫做关联数组。哈希表相关的函数列表如下: keys??????? 返回一个键值的数组。 ??????????? $ranks{aa}=1; values???? 返回一个值的数组。###用法和上面的一样 each?????? 返回一个“关键字——值”对。随后的调用返回剩下的“关键字——值”对,可用这个函数来遍历hash。 ?????????? $ranks{aa}=1; delete??? 从hash删除一个“关键字——值”对,返回被删除的元素的值。 ????????? $ranks{aa}=1; exists??? 判断该元素是否已被删除。 ????????? $ranks{aa}=1; ????????? $ranks{bb}=2; ????????? print ("存在n")if exists $ranks{aa}; #打印出"存在"。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |