La función weaken

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
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