#!/usr/bin/perl use strict; use warnings; BEGIN { package New::MyModule; *Old::MyModule:: = \*New::MyModule::; %My::Other::Name:: = %New::MyModule::; sub foo { print @_ } 1; } New::MyModule::foo("new\n"); Old::MyModule::foo("old\n"); My::Other::Name::foo("other\n"); $New::MyModule::extra1 = 'set as $New::MyModule::extra1'; $Old::MyModule::extra2 = 'set as $Old::MyModule::extra2'; $My::Other::Name::extra3 = 'set as $My::Other::Name::extra3'; # This is to avoid warnings about the above being used only once my @array = ( $New::MyModule::extra1, $Old::MyModule::extra2, $My::Other::Name::extra3, ); print "\nNew::MyModule:\n"; foreach my $key (keys %New::MyModule::) { print "$key: $New::MyModule::{$key}\n"; } print "\nOld::MyModule:\n"; foreach my $key (keys %Old::MyModule::) { print "$key: $Old::MyModule::{$key}\n"; } print "\nMy::Other::Name:\n"; foreach my $key (keys %My::Other::Name::) { print "$key: $My::Other::Name::{$key}\n"; }