package MyPackage; use warnings; use strict; sub import { my ( $caller ) = caller; my $cpackage = $caller; $cpackage =~ s/::/\//g; my ( undef, $function ) = ( shift, shift ); # I know, I know # # This is just an example. I know re-defining # BEGIN in the caller has it's problems, but I'm # trying to keep it simple for this snippet # { no strict 'refs'; eval( qq^ sub ${caller}::BEGIN { delete( $INC{'${cpackage}\.pm'} ); # # I've tried the following, too: # no warnings 'redefine'; # delete( %{ "${caller}::${function}" } ); # FILTER{} # etc. # # I get the re-define warning here require ${caller}; } ^); } }