为什么这行Perl本身只包含一个变量?

时间:2010-11-05 18:12:50

标签: perl variables subroutine

我更喜欢perl,但是我对我正在浏览的模块中的子程序中看到的一行有疑问。

my $var = 1;
....
....
....
....
$var;

让我感到震惊的是,$var只能看到1一条线。这只是回归{{1}}的迂回方式吗?

非常感谢!

2 个答案:

答案 0 :(得分:6)

在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块的表面外观会返回一个值,即使严格来说,它们也没有。

答案 1 :(得分:6)

引用perldoc -f return的最后一行:

  

如果没有明确的return,子例程,eval或do FILE会自动返回最后一个表达式的值。