Рассмотрим следующий простой пример:
#!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
не возвращает 25
непосредственно из foreach
(точно так же, как if
)? Я добавил дополнительный $sum
как:
foreach (@_) {
$sum += $_;
$sum;
}
и у меня есть такое предупреждающее сообщение:
Бесполезное использование частной переменной в контексте void в...
Однако явное использование return
работает так, как ожидалось:
foreach (@_) {
return $sum += $_; # returns 1
}