10
考虑下面的简单示例:从的foreach在子程序返回值
#!perl -w
use strict;
sub max {
my ($a, $b) = @_;
if ($a > $b) { $a }
else { $b }
}
sub total {
my $sum = 0;
foreach (@_) {
$sum += $_;
}
# $sum; # commented intentionally
}
print max(1, 5) . "\n"; # returns 5
print total(qw{ 1 3 5 7 9 }) . "\n";
根据Learning Perl(第66页):
“最后计算的表达式”的真正含义的最后一个表达式该 Perl评估,而不是子例程中的最后一条语句。
有人能解释我为什么total
不直接从foreach
(就像if
)返回25
?我增加了额外的$sum
为:
foreach (@_) {
$sum += $_;
$sum;
}
,我有这样的警告信息:
无用的使用在无效的情况下私有变量的...
但是明确使用return
作品如预期的那样:
foreach (@_) {
return $sum += $_; # returns 1
}
我现在明白了。感谢澄清这一点。 –
@Grzegorz BTW,[PBP](http://refcards.com/docs/vromansj/perl-best-practices/refguide.pdf)建议始终通过显式的'return'返回。 –
我认为更多的是“Perlish”来省略可选的'return',但我同意这个提示,因为显式样式对于程序员来说通常更加显眼。感谢PBP。 –