加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl_常用的函数

发布时间:2020-12-16 00:14:34 所属栏目:大数据 来源:网络整理
导读:这里说的是一些常见的内置函数: 时间函数: time; 返回1970年1月1日起经过的无跳跃秒数。可以用gmtime和localtime函数做进一步的处理。 times; 返回一个四个元素的列表,给出当前进程及其子进程用户和系统时间,精确到秒。 ($user,$system,$cuser,$csystem

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

时间函数:

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=(
??? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? "www"=>1,
??? ?????????????????????????????????????? "eee"=>2,
????????????????????????????????????????? );?

??????????????????????????????????? @hx=sort{$a{www}<=>$a{eee}}keys%a;
???????????????????????????????????? print "@hxn";

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 "@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);
print "@barn";
@foo=grep(!/^#/,@bar);
print "@foon";

结果为: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 "existsn" if exists $bar[3];????? 结果为:exists

splice? 清除该元素的位置。

?????? @bar=qw(s b c #dd d e);
?????? splice(@bar,3,1);
?????? print join(':',"n";?? #结果为:s:b:c:d:e

undef 让数组变成空白。

chop? 每一个元素去掉最后一个字符

@bar=qw(s b c #dd d e);
chop(@bar);
print join(':',"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 "@teamsn";?? #结果teams(aa,bb)或(bb,aa)

values???? 返回一个值的数组。###用法和上面的一样

each?????? 返回一个“关键字——值”对。随后的调用返回剩下的“关键字——值”对,可用这个函数来遍历hash。

?????????? $ranks{aa}=1;
?????????? $ranks{bb}=2;
?????????? while(($team,$rank)=each(%ranks)){
?????????? print ("Ranking for $team is $rankn");
?????????? }#结果为??? Ranking for bb is 2
?????????????????????? Ranking for aa is 1

delete??? 从hash删除一个“关键字——值”对,返回被删除的元素的值。

????????? $ranks{aa}=1;
????????? $ranks{bb}=2;
????????? $x=delete $ranks{"aa"};#现在%ranks仅剩一个"关键字---值"对了.
????????? print ("$xn"); #$x是1

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

????????? $ranks{aa}=1; ????????? $ranks{bb}=2; ????????? print ("存在n")if exists $ranks{aa}; #打印出"存在"。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读