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