文档章节

perl学习笔记-----------------------(13)

henni_719
 henni_719
发布于 2017/04/22 17:13
字数 1468
阅读 2
收藏 0

可以通过使用赋值运算符=将一个表赋值给另一个。如:($a,$b)=($c,$d);用这样的方法,可以将表当作可赋值的实体和左值。这两个表甚至可以包含某些或全部的相同变量:
($a,$b)=($b,$a);

相互赋值的表可以是不同大小的。如:
($a,$b)=(1,2,3);
print $a;

将一个表赋值给标量,将得到该表的最后一个元素:
$a=(2,4,6);
print $a;

数组对表的上下文相当了解,将其赋值给标量时,只是得到了该数组所含元素的数量而不是得到数组的最后一个元素:
@a=(2,4,6);
$a=@a;
print $a;

将标量赋值给表,只有表的第一个元素得到标量的值,其余元素得不到任何赋值,会被设置为undef():
($a,$b,$c)=1;
join函数可以将表中的元素连接成字符串。join EXPR ,LIST;这个函数让expr中的值包含着list里的字符串,然后将它们连接为单个字符串,返回结果为字符串。
print join(" ",qw/Now is the time/);

expr可以拥有多个字符。
perl使用split函数将字符串拆成表:
split /PATTERN/,EXPR,LIMIT;
split /PATTERN/,EXPR
split /PATTERN/
split
split函数在字符串PATTERN出现的每个地方将字符串EXPR分开。如果不指定EXPR,split作用于$_,而如果省掉PATTERN,这个函数在空格处将字符串分开。如果指
定了LIMIT(必须是正数),这个函数将字符串拆成不多于该数的项。
使用map作用于表中的每项。小写函数lc,lc是标量函数,并为设计为使用表。可以使用map函数作用于表中的每项:
map BLOCK LIST
map EXPR,LIST

这个函数为LIST中的每个元素进行BLOCK或EXPR计算(轮流将每个元素设置为$_)。它返回每个计算结果的表。PS:map是表上下文中对BLOCK和EXPR进行计算,所以LIST中的每个元素都可以在返回表中产生一个或多个元素(包括0)。使用表时,这个函数非常方便。如:
print join(", ",(map lc, A,B,C));
chr函数:返回与字符码或表的字符码相对应的字母:
print join(", ",(map chr,65,66,67));
每个元素乘2:
print join(", ",{map {2*$_}1,2,3});
返回表的字符串:
print(map "The current number is:$_\n",(1,2,3))
使用多重语句的表达式:
print join(", ",(map{my $value=$_;$value+=1;}1,2,3));

使用grep寻找符合标准的表项。使用map函数可以对表中的每个元素进行相同的操作。grep可以寻找符合标准的表项,用法如下:
grep BLOCK LIST;
grep EXPR,LIST
这个函数为LIST中的每个元素进行BLOCK或EXPR计算(轮流将每个元素设置为$_),返回由使表达式为真的元素组成的表。PS:在标量环境中,grep返回表达式为真的次数。
BLOCK和EXPR都是在标量下计算的。
grep函数和map函数的不同之处在于,grep返回表的子表,使特定准则为真,然而map函数对表中每个元素的表达式进行求值从主表中创建一个新表,其中包括大于15的项:
print join (", ",(grep {$_>15} (11,12,13,14,15,16,17,18)));

grep函数包含匹配模式。例如,创建了由表中所有非字符x的元素组成的子表:
print join(", ",(grep !/x/,a,b,x,d ));

PS:当grep工作时,grep函数实际返回原始表项的别名。这意味着在grep语句中,对表的一个元素进行修改实际是对原表项进行修改。为了避免修改表,可以先复制该表的一个副本。使用匿名数组编辑器来复制数组中的副本;
@array1=(1,1,1,1);
@array2=grep{$_*=2} @{[@array1]};
print @array1[1];
PS:如果改变grep语句以外的数组里元素,不会有任何问题,如果操作$_的话,只有在grep语句中才能修改原始数组。
使用perl的sort函数对表排序:
sort SUBNAME LIST
sort BLOCK LIST
sort LIST
这个函数对给定的LIST进行排序。SUBNAME给出子程序名,它返回将两个数据项用与运算符<=>和cmp一样的方法进行比较的结果。也可以在BLOCK中放置比较代码。如果不指明SUBNAME或BLOCK,sort用标准字符比较顺序对表排序。
print sort(c,b,a);
在这样一段代码块中使用比较运算符cmp获得同样的结果。注意这个比较中使用了特殊变量$a和$b;这些变量由perl自动填充:
print sort($a cmp $b) (c,b,a);
降序:
print sort($b cmp $a) (c,b,a);

使用数字比较运算符<=>对数字进行比较:
print sort{$a<=>$b}(3,2,1);

在子程序中放一段比较数值得代码:
sub myfunction($$)#@_将原型$$传递给子程序,就无需显示使用$a和$b
{
return (shift(@_) <=> shift(@_));
}
print sort myfunction (3,2,1);
print "\n";
sub myfunctionb
{
return (shift(@_) <=> shift(@_));
}
print sort {myfunctionb($a,$b)} (3,2,1);#显示使用$a和$b


PS:排序包括很多比较,而如果比较子程序所包含大量代码,则会使程序的速度减慢,一个解决办法就是:从作用于数组的子程序中执行所有的计算,首先使用map创建新的数组,然后使用sort对该数组排序,然后再次使用map回到原始数组(map-sort-map排序)
reverse函数可以使表反向排列:
reverse LIST;
print reverse (1,2,3);

强制进入标量环境用scalar函数:scalar EXPR;这个函数强制EXPR被在标量环境下解释。Perl中并不拥有正式运算符来强制让表达式在上下文中解释。如果使用scalar函数,它强制表进入标量环境,那么它返回表的最后一个元素。
print scalar (2,4,6);



© 著作权归作者所有

共有 人打赏支持
henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
Perl脚本学习笔记(二)

11. Perl没有Boolean类型,比较重要的是一点: 这意味着undef(很快会看到)为false。所有的引用(在Alpaca 书中有详细讨论)都是true。 12. chomp注意事项: (1)chomp 是一个函数。作为一个...

像教授
2017/11/26
0
0
Per学习笔记[3]

Per学习笔记 1.子程序 (1)子程序的定义可以在程序的任意位置,且不需要在定义之前有任何声明。 (2)子程序的定义是全局的,可以在子程序中使用全局变量。 (3)所有的Perl 子程序都会返回值,在P...

wbf961127
2017/11/12
0
0
xtrabackup学习笔记

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz yum -y install perl perl-devel libaio liba......

glassboy2009
2017/06/06
0
0
《Pro ASP.NET MVC 3 Framework》学习笔记目录

《Pro ASP.NET MVC 3 Framework》简介: 作者: Adam Freeman 和 Steven Sanderson 出版社: Apress; New 平装: 820页 语种: 英语 ISBN: 1430234040 声明:笔记里面按我自己的理解翻译了大部分...

mszhangxuefei
2012/02/07
0
0
语言学习读书笔记PHP和asp.net编程语言哪个更有前途?

编程语言一直是学习计算机编程门专业的热门讨论话题,而我也选择了这个专业,入学一年了,马上面临着语言的选择问题,业余我需要选择一门编程语言作为重点研究对象,那么问题来了:到底是选择...

原创小博客
2018/05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

商品详情页上拉查看详情

商品详情页上拉查看详情 目录介绍 01.该库介绍 02.效果展示 03.如何使用 04.注意要点 05.优化问题 06.部分代码逻辑 07.参考案例 01.该库介绍 模仿淘宝、京东、考拉等商品详情页分页加载的UI效...

潇湘剑雨
30分钟前
1
0
Netty内存池之PoolArena详解

PoolArena是Netty内存池中的一个核心容器,它的主要作用是对创建的一系列的PoolChunk和PoolSubpage进行管理,根据申请的不同内存大小将最终的申请动作委托给这两个子容器进行管理。整体上,P...

爱宝贝丶
35分钟前
4
0
Django使用Channels实现WebSocket--下篇

希望通过对这两篇文章的学习,能够对Channels有更加深入的了解,使用起来得心应手游刃有余 通过上一篇《Django使用Channels实现WebSocket--上篇》的学习应该对Channels的各种概念有了清晰的认...

运维咖啡吧
42分钟前
3
0
linux下设置定时执行shell脚本的示例

很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据、数据库数据等 不适合人工经常做的一些操作这里简单说下 shell Shell俗称壳,类似于DOS下的command...

阿锋zxf
46分钟前
3
0
介绍Kubernetes监控Heapster

什么是Heapster? Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS,Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机...

xiangyunyan
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部