Perl 上下文及其对操作的影响
来源:互联网 发布:startos软件中心 编辑:程序博客网 时间:2024/04/30 18:36
数字和字符串上下文
在Perl中如何处理数据,如何求表达式的值,取决与上下文,不同操作符上下文不同。
要点
在Perl中如何处理数据,如何求表达式的值,取决与上下文,不同操作符上下文不同。
$result = '123' + '345'; ## 468$result = 123 . 345 ; ##1233456print "12 is less than 2!\n" if '12' lt '2'; ##lt为字符串比较print "Oh noes! foo is bar!\n" if 'foo' == 'bar'; ## ==为数值比较符,foo和bar转换为数值0;
标量和列表上下文
档操作需要的是单个对象时,Perl会使用标量上下文。期望多个对象时,使用列表上下文。其实关键在于操作符,即在Perl语法中,操作符把上下文看成怎样的情景。如操作符两边需要的都是单个操作对象:
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这样边度边处理的方式比较合适。
赋值操作决定的上下文
如果左值是一个列表,那么Perl认为右值是一个列表。如果左值是一个标量变量,右值只取标量变量部分。
如:
$n = ( 'a','b','c'); #$n为'a';($n,$m) = ('a','b','c'); #$n为'a' $m为'b'@arr = ('a','b','c');@lines = <STDIN>; #读入所有行$line = <STDIN>; #只读取一行
空上下文结果
某些情况下,Perl会告诉我们空上下文结果操作毫无意义。比如打开warnings开关时,Perl会报:Useless use of a variable in void context
如:
some_sub(@args);grep {/foo/} @array;1 + 2;##上面的计算结果,没有被使用
要点
- Perl会根据操作符自动判断当前的上下文环境。
- Perl会根据数字或字符串上下文来对标量作相应解释。
- 在列表上下文或标量上下文中的计算结果可能完全不同。
0 0
- Perl 上下文及其对操作的影响
- JavaScript 两个小括号 ()() 对执行上下文的影响
- CSS Opacity属性对层叠上下文的影响
- perl对数组的操作
- perl对mysql的操作
- PERL的上下文环境
- perl字符串操作符、system函数及其对系统命令的调用
- ADC主要性能及其性能及其对接收机性能的影响
- Perl闭包以及对mod_perl的影响
- Perl对Excel文件的各种操作
- perl脚本对execl的操作
- Perl对数据库的查询操作
- perl 对Excel2003文档的读写操作
- Nologging操作对standby的影响
- HWM对数据库操作的影响
- 数据压缩对DML操作的影响
- insert 操作对undo的影响
- 经常DML操作对索引的影响
- Caused by: Action class [com.struts.action.LoginAction] not found 解决方法
- 黑马程序员——多线程(一)
- DDDW重复行只能选择第一个的问题
- android开发之Activity启动模式图文详解
- JSP学习笔记(一):JSP标签
- Perl 上下文及其对操作的影响
- iOSUI学习之--------将程序json字符串上传至服务器
- iOS:把对象直接转化成NSDictionary或JSON
- Fraction to Recurring Decimal 分数转为小数
- 在Windows下搭建Redmine
- 基于注解的声明式事务管理
- Linux 进程--父进程查询子进程的退出状态
- Caesar cipher
- leetcode_single number