miércoles, 20 de abril de 2011

referencias en Perl

Muchas veces es necesario usar una función, y que modifique la variable que se le pasa, como lo hace el chomp. Eso se hace usando referencias en Perl.

El código de ejemplo es:

#!/usr/bin/perl -w


my $a = "hola";

sub NoRef{
  my $tmp = $_[0];

  $tmp =~ s/hola/chau/g;

  print "dentro: '" . $tmp . "'\n";

  return 0;
}

sub WithRef{
  my $tmp = \$_[0];

  $$tmp =~ s/hola/chau/g;

  print "dentro: '" . $$tmp . "'\n";

  return 0;
}

print "primero a es $a\n";

NoRef($a);

print "ahora es a es $a\n";

WithRef($a);

print "y por ultimo a es $a\n";
 

La explicación (gíbara) es, al usar referencias, la variable pasa a ser un puntero, con lo que la salida es:

primero a es hola
dentro: 'chau'
ahora es a es hola
dentro: 'chau'
y por ultimo a es chau

Esto es de utilidad, para entender el funcionamiento de funciones como uc o push. La primera no hace nada con la variable, regresa el resultado, pero la variable queda intacta. Mientras que la segunda, regresa el número de elementos del array, pero modifica el array que se le pasó agregando el listado de objetos pasados.

No hay comentarios.:

Publicar un comentario