我们在$return
等代码中使用$return = foo($something);
变量时发现了奇怪的效果。由于返回名称,<{1}}变量有点特殊吗?
答案 0 :(得分:8)
根据Perl documentation,没有。
答案 1 :(得分:5)
不,不是perl special。但是我导出了一些模块,这可能会带来意想不到的行为。
答案 2 :(得分:1)
名为$return
的变量没什么特别之处。那说,写
my $return = foo($something);
return $return;
与写作
不同return foo($something);
第一个表单在标量上下文中调用foo()
。后者将从调用者传播上下文。这可能会导致foo()
表现不同。比较:
sub foo { return localtime }
sub bar { my $x = foo(); return $x }
sub baz { return foo() }
say join ', ', bar(); # Thu May 26 08:24:59 2011
say join ', ', baz(); # 59, 24, 8, 26, 4, 111, 4, 145, 1
这是因为在标量上下文中,localtime
返回格式化为字符串的时间,但在列表上下文中,它返回秒,分钟,小时等的值列表。
上下文的概念是Perl独有的。要了解有关它的更多信息,请参阅perlsub。