我在一本O'Reilly的书中发现了一个有点奇怪的例子:
@backwards = reverse qw/ yabba dabba doo /;
print "list context: @backwards\n";
$backward = reverse qw/ yabba dabba doo /;
print "scalar1 context: $backward\n";
$notbackward = qw/ yabba dabba doo /;
print "scalar2 context: $notbackward\n";
print "print context: ",reverse qw/ yabba dabba doo /;
print "\n";
输出结果为:
list context: doo dabba yabba
scalar1 context: oodabbadabbay
scalar2 context: doo
print context: doodabbayabba
我不理解的是标量上下文:scalar1
。
书中说'reverse something'给出列表上下文,所以我猜qw/ yabba dabba doo /
被视为一个列表,reverse qw/ yabba dabba doo /
为('doo', 'dabba', 'yabba')。
然后就有了$backward = something
,这意味着something是一个标量,所以我期望结果是'doo dabba yabba',但实际结果却不同:'oodabbadabbay'。
我认为原因是不能直接将列表设置为标量。所以我进行了scalar2
测试:只打印列表中最后一项。为什么?为什么在scalar1测试中没有这样做?
标量测试输出是如何工作的?