PERL的上下文环境
上下文指的是表达式所在的位置,在PERL解析表达式的时候,要么希望是一个标量,要么希望得到一个列表,在这里,表达式所在的位置不同,表达式的意义就会有所不同 举例说明: ?@people=qw(fred barney hehe); ?$number=42+@people; ? print $number#这里,再进行$number=42+@people时,期望获得的是一个标量,因而,@people会得到的是people中变量的个数,即输出的是45 #然而如果我们的列表中元素就是一个,或者根本就是一个数字呢?,其实得到的结果是一样的! @people; $number=42+@people; print $number#输出的是42 @people=qw(42); $number=42+@people; print $number;#输出的是43 需要注意的是,当我们把一个列表放在标量的上下文环境中的到的就是元素个数,这并不是一定的 某些表达式的存在就是为了产生列表。比如qw reverse等函数,这样他们返回的是处理后的字符串 $backwards=qw(yabba dabba doo); 在列表上下文中使用产生标量的表达式 @fred=7*6; fred则是仅包含一个元素的列表,即42 @barney="hello"."World"; //清空列表有两种方法 @fred=undef;列表中仅有一个元素,并且其值是undef,并未清空,undef是一个标量,赋值给列表并不会清空 @fred=();正确的清空列表的方法,也就是给列表fred重新付一个空列表的值 强制切换标量上下文 @rocks=qw(talc quartz jade obsidian); print "the number is ",@rocks;#看到了这样输出的是石头的名称 @rocks=qw(talc quartz jade obsidian); print "the number is ",scalar @rocks;#这样输出的是4 ,其实不一定非要使用scalar进行切换,print "the number is ".@rocks,只需构造一个标量上下文即可 现在说下<STDIN>吧,在列表上下文中,@line=<STDIN>;获得的是已经确定的输入,即最后一个回车之前的数据 在标量上下文当中,返回输入数据的下一行,一般都是空的?(还不太清楚,待定...) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |