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

Jan*_*kie 3 variables perl subroutine

我更喜欢perl,但是我对我在一个模块子程序中看到的一条线路有疑问.

my $var = 1;
....
....
....
....
$var;
Run Code Online (Sandbox Code Playgroud)

抛出我的只是看到这$var一切都在一条线上.这只是回归的迂回方式1吗?

非常感谢!

Ben*_*son 6

在perl中,块的值是块中最后一个表达式的值.这只是一个简写return $var.

编辑:纯粹主义者指出,这些块通常不会返回值(例如,他们在Scala中执行),因此您无法编写:

my $x = if (cond) { 7 } else { 8 };  # wrong!
Run Code Online (Sandbox Code Playgroud)

子例程,eval或do FILE的隐式返回值是最后计算的表达式.最后一个表达式可以在一个块内,但是:

sub f {
    my $cond = shift;
    if ($cond) { 7 } else { 8 }  # successfully returns 7 or 8 from f()
}
Run Code Online (Sandbox Code Playgroud)

if/else块返回一个值的表面外观,尽管严格来说,它们没有.

  • 很好地指出所有块,甚至`if(...){...} else {...}`块返回它们最后执行的表达式.在大多数情况下,它不被使用,但可以是结构是子程序中的最后一个,或者封装在`do {...}`块中 (3认同)
  • 对不起,但这个答案是对的.在Perl中,块本身不会*返回任何内容.你只是看到`sub/do/eval`产生了它最后评估的结果,这与**BLOCK**结构完全无关. (2认同)

Ala*_*avi 6

引用最后一行perldoc -f return:

在没有显式的情况下return,子例程,eval或do FILE会自动返回最后一个表达式的值.