BEGIN{ # load Pack1 defining "package Abc;" require Pack1; # copy the Abc namespace to Cde namespace my $ref = $main::{'Abc::'}; foreach my $n (keys %$ref) { *{"Cde::$n"} = $ref->{$n}; } # remove Abc namespace delete $main::{'Abc::'}; } BEGIN { # load Pack2 also defining "package Abc;" require Pack2; } # now the first version is in Cde package, # the second version is in Abc package Cde::test(); Abc::test();