$return变量在Perl中有什么特殊之处吗?

$return变量在Perl中有什么特殊之处吗?,perl,Perl,在代码中使用$return=foo($something)等变量时,我们观察到了奇怪的效果。$return变量是否因为return名称而具有某种特殊性?否它不是。但是有些模块会导出它,这可能会提供意外的行为 请参见不,不是。但是有些模块会导出它,这可能会提供意外的行为 请参见根据编号根据编号名为$return的变量没有什么特别之处。也就是说,写作 my $return = foo($something); return $return; 这和写作不一样 return foo($somethin

在代码中使用
$return=foo($something)等变量时,我们观察到了奇怪的效果
$return
变量是否因为return名称而具有某种特殊性?

否它不是。但是有些模块会导出它,这可能会提供意外的行为

请参见

不,不是。但是有些模块会导出它,这可能会提供意外的行为


请参见

根据编号

根据编号

名为
$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独有的。要了解更多信息,请参阅。

名为
$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独有的。要了解更多信息,请参阅。

这些奇怪的效果是什么?嗯,美味的模糊!Perl中唯一的特殊变量列在
perldoc perlvar
中。除此之外,你可以使用任何你想要的名字。这些奇怪的效果是什么?嗯,美味的模糊!Perl中唯一的特殊变量列在
perldoc perlvar
中。除此之外,您可以使用任何您想要的名称。不仅如此,如果未指定返回值,sub的最后一行将是返回值。因此
子条{$x=foo()}
相同,正如
子条{scalar foo()}
子条{return scalar foo()}
@Joel:[nit]在没有显式
返回时,子条返回最后一个表达式的值。虽然这通常是sub的最后一行,但它不一定是。不仅如此,如果未指定返回,sub的最后一行将是返回值。因此
子条{$x=foo()}
相同,正如
子条{scalar foo()}
子条{return scalar foo()}
@Joel:[nit]在没有显式
返回时,子条返回最后一个表达式的值。虽然这通常是潜艇的最后一行,但不一定是。