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。 –