La función weaken recibe como argumento una referencia. Hace que no se incremente el contador de referencias del valor asociado con dicha referencia. Vea el siguiente ejemplo:
hp@nereida:~/Lperl/src$ cat -n noweaken.pl 1 use strict; 2 use Scalar::Util qw(weaken); 3 my $ref; 4 { 5 my $var = "hola\n"; 6 $ref = \$var; 7 } 8 print $$ref; |
lhp@nereida:~/Lperl/src$ cat -n weaken.pl 1 use strict; 2 use Scalar::Util qw(weaken); 3 my $ref; 4 { 5 my $var = "hola\n"; 6 $ref = \$var; 7 weaken($ref); 8 } 9 print $$ref; |
lhp@nereida:~/Lperl/src$ perl noweaken.pl hola |
hp@nereida:~/Lperl/src$ perl weaken.pl Can't use an undefined value as a SCALAR reference ... |
Una referencia se dice débil (weak) si no cuenta en el objeto al que referencia.
Cuando el contador del objeto al que referencia alcanza cero
la referencia contiene undef
.
Tenga en cuenta que la copia de una referencia débil (creada con weaken
)
es una referencia fuerte:
lhp@nereida:~/Lperl/src$ cat -n weakenwithcopy.pl 1 use strict; 2 use Scalar::Util qw(weaken); 3 my ($ref, $copy); 4 { 5 my $var = "hola\n"; 6 $ref = \$var; 7 weaken($ref); 8 $copy = $ref; 9 } 10 print $$ref; 11 lhp@nereida:~/Lperl/src$ perl weakenwithcopy.pl hola
Casiano Rodríguez León