Perl 上下文及其对操作的影响
发布时间:2020-12-15 23:43:59 所属栏目:大数据 来源:网络整理
导读:数字和字符串上下文 在Perl中如何处理数据,如何求表达式的值,取决与上下文,不同操作符上下文不同。 $result = '123' + '345'; ## 468$result = 123 . 345 ; ##1233456print "12 is less than 2!n" if '12' lt '2'; ##lt为字符串比较print "Oh noes! foo
数字和字符串上下文
在Perl中如何处理数据,如何求表达式的值,取决与上下文,不同操作符上下文不同。 $result = '123' + '345'; ## 468 $result = 123 . 345 ; ##1233456 print "12 is less than 2!n" if '12' lt '2'; ##lt为字符串比较 print "Oh noes! foo is bar!n" if 'foo' == 'bar'; ## ==为数值比较符,foo和bar转换为数值0; 标量和列表上下文 1 + 2; 'foo' . 'bar';列表操作符期望操作的是多个元素,如print,它会取得一列元素并输出: print reverse( 1..10 ) ."n";在Perl中,while的条件语句是标量上下文环境,而foreach的则是列表上下文: while(标量上下文){...} foreach(列表上下文){...}加入要遍历某个文件句柄,对其中的每行内容进行处理,一旦发现 "__END__" 就立即停止。在while循环中,我们会依次读入一行内容进行处理,然后结束本次循环,继续读入文件句柄中的下一行: while(<STDIN>){ last if /__END__/; ...; } $next_line = <STDIN>;改为foreach: foreach(<STDIN>){ last if /__END__/; ....; } $next_line = <STDIN>; ##完蛋了,没其他内容。因为foreach的列表环境一次性把所有的内容都从STDIN中读出来了,STDIN里已经什么都没有了。一般while这样边度边处理的方式比较合适。 赋值操作决定的上下文 如: $n = ( 'a','b','c'); #$n为'a'; ($n,$m) = ('a','c'); #$n为'a' $m为'b' @arr = ('a','c'); @lines = <STDIN>; #读入所有行 $line = <STDIN>; #只读取一行
某些情况下,Perl会告诉我们空上下文结果操作毫无意义。比如打开warnings开关时,Perl会报:Useless use of a variable in void context some_sub(@args); grep {/foo/} @array; 1 + 2; ##上面的计算结果,没有被使用 要点
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |