sub a { sub x { print "I came from a\n"; } } sub b { sub x { print "I came from b\n"; } } x(); a(); x(); b(); x(); #### I came from b I came from b I came from b #### sub a { local(*x) = sub { "from a" }; doit(); } sub b { local(*x) = sub { "from b" }; doit(); } sub doit { print "I came ", x(), "\n"; }