Не понимаю, почему программа ведёт себя настолько по разному, из-за строки, которая не должна влиять ни на что #!/usr/bin/perl use Scalar::Util qw(weaken); my %refs; my %count; my $a; for(1..100) { $a = {}; print $_,' ', $a, "\n"; # $count{$a}++; # Вот эта строка $refs{$_} = $a; weaken($refs{$_}); } print "\n\n\n"; print %count;