sub recurse { my $level = shift; print "recurse [$level]\n"; recurse($level - 1) if $level > 0; } #### #!/usr/bin/perl -w use strict; local $\ = "\n"; sub oldsub { my $level = shift; print "oldsub [$level]"; oldsub($level - 1) if $level > 0; } sub newsub { print "newsub [$_[0]]"; } my $oldsub_ref = \&oldsub; $oldsub_ref->(2); print '-' x 10; *oldsub = \&newsub; $oldsub_ref->(2); #### oldsub [2] oldsub [1] oldsub [0] ---------- Subroutine main::oldsub redefined at ./typeglob_clobber.pl line 22. oldsub [2] newsub [1] #### my $coderef = do { my $selfref; $selfref = sub { # use $selfref here for recursion }; }; #### { my $selfref; sub named { # use $selfref here } $selfref = \&named; }