perl foreach返回值空白

时间:2014-05-02 14:36:39

标签: perl

这个子死了:

sub _log {
  foreach(@_) { 
    print $_ . "\n";  
  }
  #return 1; # This fixes it but I want to understand the why
}
_log("log something") || die "I died";

此子中的打印返回1,但子本身返回''。我以为foreachs会返回其中最后一个语句的返回。情况绝对不是这样。

为什么这个子回归1?

2 个答案:

答案 0 :(得分:4)

foreach评估的值实际上是未定义的行为 - 文档does not mention任何返回值。始终使用明确的return来避免此类错误,并且不要依赖whileforif等语句级构造的值。

实际上,这样的构造确实具有一致的返回值 - 最后评估的值。例如,foo() if bar()的编译方式与bar() and foo()相同,后者确实有明确定义的返回值。

答案 1 :(得分:1)

foreach永远不会产生结果,所以带有foreach的子结尾将返回就像带有return;的子结尾,即标量上下文中的undef(如本示例所示) )和列表上下文中的空列表。