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);
print $backwards;
print "\n";


$backwards=reverse(qw(yabba dabba doo));
print $backwards;
print "\n";

在列表上下文中使用产生标量的表达式

@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>;获得的是已经确定的输入,即最后一个回车之前的数据

在标量上下文当中,返回输入数据的下一行,一般都是空的?(还不太清楚,待定...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值