explorer escribiste:También puedes pasarlo por referencia:
Using perl Syntax Highlighting
my %hash = (
enero
=> 15
,
febrero
=> 18
,
marzo
=> 3
,
);
my $valor = 2;
&procedimiento( $valor, \%hash );
sub procedimiento
{
my ( $valor, $refhash ) = @_;
foreach my $clave ( sort keys %$refhash ) {
print "$clave : ", $valor * $refhash->{$clave}, "\n";
}
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En realidad la respuesta es para todos, solo que tomé este quote haciendo referencia a 'referencia'
En realidad en Perl el paso por referencia es hecho SIEMPRE, puesto que todos los parámetros pasados lo son así. El array @_ es un alias a los argumentos mandados a la función ( lo cual internamente es representado con un paso por referencia ).
Es por eso que en muchos textos y tutoriales encontrarán que la recomendación es siempre hacer una copia de @_ ( que es lo que normalmente se hace ), y que al pasar UNA referencia a la estructura que te interesa, en realidad ( internamente ) pasas un alias a dicha referencia ( una ref a otra ref )
Using perl Syntax Highlighting
my @a = (1
, 2
, 3
, 4
);
sub foo
{ $_[1
]++ }
foo
( @a );
print @a; # 1334
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Esta pequeña porción de código ejemplifica a lo que verdaderamente me refiero con un 'alias' a los argumentos de la función, y esto es algo similar a:
Using perl Syntax Highlighting
*_ = *a{ARRAY
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ahora bien, no hay que confundir como Perl maneja una referencia, a una referencia manejada por C++ por ejemplo. Aunque los términos tienen mucho en común, el tipo de dato ( sus operaciones ) es completamente diferente.
En realidad hay un poquito de mas profundidad en el tema del paso de parámetros hacia una función en un lenguaje, pero espero con lo anterior, en el caso de Perl, haber quitado dicho malentendido.
Saludos,