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

    xiaoxiao2021-11-17  76

    可以通过使用赋值运算符=将一个表赋值给另一个。如:($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); WEL测试 认证博客专家 软件测试 性能测试 接口测试 一线的测试工作人员。喜欢专研并应用新的技术,用于提升测试效率。擅长:测试新人培训、测试进阶、接口测试、性能测试、问题定位、自动化、数据测试、渗透测试! 如果对测试感兴趣或者遇到一些难题,可以加我微信:Wel_Test,加时填好备注!
    转载请注明原文地址: https://ju.6miu.com/read-678304.html

    最新回复(0)