john@john-laptop:~/Projects/Cloud-T3n$ time perl refs.pl 1000000/1000000 real 0m53.021s user 0m10.753s sys 0m1.912s #### john@john-laptop:~/Projects/Cloud-T3n$ time /usr/bin/perl refs.pl 1000000/1000000 real 0m58.048s user 0m11.989s sys 0m1.672s #### package Top; sub new { my $class = shift; my $s = bless { }, $class; $s->{bottom} = Bottom->new( $s ); return $s; } #===================================== package Bottom; use Scalar::Util 'weaken'; sub new { my ($class, $top) = @_; my $s = bless { top => $top }, $class; weaken($s->{top}); return $s; } #===================================== package main; use Devel::Cycle; for( 1...1_000_000 ) { print "\r$_/1000000"; my $top = Top->new(); my $bottom = $top->{bottom} or die "NO BOTTOM!"; $top = $bottom->{top} or die "NO TOP!"; find_cycle( $top ); find_cycle( $bottom ); }