在Perl中$ return变量是否特别?

时间:2011-05-25 09:31:32

标签: perl

我们在$return等代码中使用$return = foo($something);变量时发现了奇怪的效果。由于返回名称,<{1}}变量有点特殊吗?

3 个答案:

答案 0 :(得分:8)

根据Perl documentation,没有。

答案 1 :(得分:5)

不,不是perl special。但是我导出了一些模块,这可能会带来意想不到的行为。

请参阅This tutorial

答案 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