Rozważmy następujący prosty przykład:Zwracanie wartości z foreach w podprogramów
#!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";
Według Learning Perl (strona 66):
„Ostatni ocenia wyrażenie” naprawdę oznacza, że ostatnie wyrażenie że Perl ocenia, zamiast ostatniego stwierdzenia w podprogramie.
Czy ktoś może mi wyjaśnić dlaczego total
nie zwraca 25
bezpośrednio od foreach
(podobnie jak if
)? Dodałem dodatkowy $sum
jak:
foreach (@_) {
$sum += $_;
$sum;
}
i mam taki komunikat ostrzegawczy:
Useless wykorzystanie prywatnej zmiennej w kontekście nieważne co ...
jednak wyraźne zastosowanie return
prac zgodnie z oczekiwaniami:
foreach (@_) {
return $sum += $_; # returns 1
}
Teraz rozumiem. Dziękuję za wyjaśnienie tego. –
@Grzegorz BTW, [PBP] (http://refcards.com/docs/vromansj/perl-best-practices/refguide.pdf) zaleca, aby zawsze zwracać poprzez jawne 'return'. –
Myślałem, że to bardziej "Perlish", aby pominąć opcjonalny 'return', ale zgadzam się z tą wskazówką, ponieważ styl jawny jest ogólnie bardziej widoczny dla programisty. Dzięki za PBP. –