{ package Foo; sub f { "default f\n" } sub g { "default g\n" } } sub localized(&) { local *Foo::f = sub { "localized f\n"; }; local *Foo::g = sub { "localized g\n"; }; $_[0]->(); } localized { print STDERR Foo->f, Foo->g; }