问题描述
|
在类似
$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。