Considere siguiente ejemplo sencillo:Volviendo valor de foreach en subrutinas
#!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";
Según Learning Perl (página 66):
“La última expresión evaluada” significa en realidad la última expresión que Perl evalúa, en lugar de la última declaración en la subrutina.
Puede alguien explicar por qué no vuelve total
25
directamente de foreach
(al igual que if
)? Yo añadido adicional $sum
como:
foreach (@_) {
$sum += $_;
$sum;
}
y tengo tal mensaje de advertencia:
uso inútil de la variable privada en el marco vacío en ...
uso explícito de return
Sin embargo las obras como se esperaba:
foreach (@_) {
return $sum += $_; # returns 1
}
Entiendo ahora. Gracias por aclarar esto. –
@Grzegorz BTW, [PBP] (http://refcards.com/docs/vromansj/perl-best-practices/refguide.pdf) recomienda regresar siempre a través de un 'return' explícito. –
Pensé que es más "Perlish" para omitir el 'retorno' opcional, pero estoy de acuerdo con ese consejo, porque el estilo explícito generalmente es más conspicuo para el programador. Gracias por PBP. –