上下文指的是表达式所在的位置,在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>;获得的是已经确定的输入,即最后一个回车之前的数据

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