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
