Referencias Simbólicas

Lo normal es que una expresión como $$a indique que $a es una variable del tipo referencia a un escalar. Si no fuera el caso, esto es, si $a no fuera una referencia, Perl comprueba si $a contiene una cadena (esto es, la variable está en un contexto escalar cadena) y si es el caso usa esa cadena como nombre de una variable de paquete. Esto se conoce como referenciado simbolico. Su uso es mas eficiente que la alternativa de usar eval. Veamos un ejemplo (obsérvese la ausencia de -w y de use strict):

lhp@nereida:~/Lperl/src/testing$ cat -n symbolicref.pl
 1  #!/usr/bin/perl
 2  sub data {
 3    my ($fa, $sa) = @_;
 4    print "Inside data\n";
 5    print "First list: @$fa\n";
 6    print "Second list: @$sa\n";
 7  }
 8
 9  $data = 4;
10  @data = (1,2,3,4);
11  @tutu = 5..8;
12  $name = "data";
13
14  print "${$name}\n";
15  push  @{$name}, @data;
16  print "@data\n";
17  &{$name}('data', 'tutu');
La ejecución da como resultado:
lhp@nereida:~/Lperl/src/testing$ symbolicref.pl
4
1 2 3 4 1 2 3 4
Inside data
First list: 1 2 3 4 1 2 3 4
Second list: 5 6 7 8



Subsecciones
Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19