use Module; # Execute module first so it doesn't replace you! BEGIN { package Module; no warnings 'override'; sub func { ... } } #### use Module; # Execute module first so it doesn't replace you! BEGIN { package Module; no warnings 'override'; *func = sub { ... }; } #### use Module; # Execute module first so it doesn't replace you! BEGIN { package Module; no warnings 'override'; my $orig_func = \&func; sub func { ... $orig_func->(...) ... }; } #### use Module; # Execute module first so it doesn't replace you! { package Module; no warnings 'override'; my $orig_func = \&func; local *func = sub { ... $orig_func->(...) ... }; # Replaced from here. ... # Replaced until here. } #### >perl -c -we"sub foo { my $x; sub bar { $x } }" Variable "$x" will not stay shared at -e line 1. -e syntax OK