El código es:
#!/usr/bin/perl -w
use strict;
sub myfun {
my $k = \shift;
${$k} = "Chau Mundo";
print "k es '" . ${ $k } . "'\n";
print "k es '" . $$k . "'\n";
return $$k ;
}
my $p = "Hola Mundo";
print myfun($p) . "\n";;
print "p es $p\n";
La salida de este programa es:
matias@t0001850023:/tmp$ perl -w k.pl
k es 'Chau Mundo'
k es 'Chau Mundo'
Chau Mundo
p es Chau Mundo
Una de las razones para necesitar usar referencias en vez de variables, es que el paso de variables simples copia la variable de un lado a otro, pero si uno tiene problemas de memoria, o tiene algunas variables muy pesadas (megas), puede ser necesario usar referencias para economizar recursos.
La explicación es bastante simple, al usar la "\" delante del shift (el shift regresa el primer valor del array -en este caso @_- y lo borra del array), en realidad no se hace la asignación del valor, sino de la dirección (puntero). Luego, para usar el valor del scalar, hay que llamarlo con un "$" extra. Al hacer una asignación, se hace la asignación a donde apunta el puntero, y no al puntero en sí (si se pierde todo si se hace un "$k = 0;", abortaría por intentar modificar un valor de solo lectura).
Esta es una referencia con ruby, dado que todo es una referencia, y hacer una asignación de valores es lo que es "no convencional".
3 comentarios:
Gracias! Me has aclarado el uso de referencias
De nada, si quieres, puedes subscribirte a la lista (poco tráfico), hay varios que saben de Perl y el tiepo de respuesta es bastante bajo (pese a que no hay mucho tráfico, se responde rápido).
Estamos hablando de los pointers en C ? es eso a lo que en Perl se les llama referencias ?
Publicar un comentario