package MyBase; use strict; use warnings; use Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(bar); sub FOO() {42} sub bar { return FOO(); } 1; #### package MySub; use strict; use warnings; sub _filter { my $module = $_[1]; if ($module =~ m/^MyBase/) { foreach my $dir (@INC[1..$#INC]) { if (-e "$dir/MyBase.pm" && -f _) { open FH, '<', "$Bin/lib/MyBase.pm" or die $!; last; } } die "Couldn't find MyBase.pm in @INC\n" unless defined *FH; return \'', \*FH, sub { if (length $_) { $_ =~ s/(sub FOO\(\)\s*\{)(\d+)(\})/${1}44${3}/; return 1; } else { return 0; } }; } return (); } BEGIN {unshift @INC, \&_filter} use MyBase; use Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(baz); sub baz { return bar(); } 1; #### #!/usr/bin/env perl use strict; use warnings; use FindBin qw($Bin); use lib "$Bin/lib"; use MySub; print baz(), "\n";