Update: After further testing, I don't think this is a good solution. The symbol tables do not behave as I thought they would.
Or, for more segregation between the old and new modules, you can copy the entire symbol table.
#!/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";
}
Which produces:
new
old
other
New::MyModule:
extra2: *New::MyModule::extra2
extra1: *New::MyModule::extra1
foo: *New::MyModule::foo
Old::MyModule:
extra2: *New::MyModule::extra2
extra1: *New::MyModule::extra1
foo: *New::MyModule::foo
My::Other::Name:
extra3: *My::Other::Name::extra3
foo: *New::MyModule::foo
|