Perl中$ return变量是否特别?

问题描述

| 在类似
$return = foo($something);
代码中使用
$return
变量时,我们已经观察到奇怪的效果。由于返回名称
$return
变量是否在某种程度上特别?     

解决方法

根据Perl文档,没有。     ,不,这不是perl特殊的。但是某些模块可以将其导出,这可能会提供意外的行为。 请参阅本教程     ,名为“ 0”的变量没有什么特别的。也就是说,写作
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,145,1
发生这种情况是因为在标量上下文中,“ 9”返回格式化为字符串的时间,但在列表上下文中,它返回秒,分钟,小时等的值列表。 上下文的概念是Perl特有的。要了解更多信息,请参见perlsub。