我越喜欢 perl,我越是喜欢它,但我对我在正在查看的模块的子例程中看到的一行有疑问。
my $var = 1;
....
....
....
....
$var;
让我感到震惊的是,这$var
一切都在一条线上。这只是一种迂回的返回方式1
吗?
非常感谢!
简
我越喜欢 perl,我越是喜欢它,但我对我在正在查看的模块的子例程中看到的一行有疑问。
my $var = 1;
....
....
....
....
$var;
让我感到震惊的是,这$var
一切都在一条线上。这只是一种迂回的返回方式1
吗?
非常感谢!
简
在 perl 中,块的值是块中最后一个表达式的值。这只是return $var
.
编辑:纯粹主义者指出,这些块通常不返回值(例如,它们在 Scala 中所做的那样),因此您不能编写:
my $x = if (cond) { 7 } else { 8 }; # wrong!
子例程 eval 或 do FILE 的隐式返回值是最后评估的表达式。不过,最后一个表达式可以在块内:
sub f {
my $cond = shift;
if ($cond) { 7 } else { 8 } # successfully returns 7 or 8 from f()
}
if/else 块返回一个值的表面看起来很肤浅,尽管严格来说,它们没有。
引用最后一行perldoc -f return
:
在没有显式的情况下
return
,子例程、eval 或 do FILE 会自动返回最后评估的表达式的值。