http://www.perlmonks.org?node_id=407763

aufflick has asked for the wisdom of the Perl Monks concerning the following question:

Imagine a library of subs that are 'require'd in a bnch of files.

At the moment they are all global (ie in main::), but I want to move them to a namespace (say Util::) to avoide clashes etc.

But there's a lot of code that uses these and I don't want to have to touch every file, possibly breaking it.

So I want to define all the subs in a namespace, but for the next few months have the subs aliased to main:: as well. One at a time that's easy, but I would like to pull all the sub names from the package table and alias them all in one hit (or a loop).

I'm sure it's simple, I'm just not quite sure how to achieve it.

Update: I am thinking something like this:

sub foo::bar {print "bar\n";} %main:: = (%main::, %foo::); bar();
but that doesn't work... I'd also like to use * globs since they would be more efficient

Update 2:This works:

sub foo::bar {print "bar\n";} foreach $name (keys %foo::) { $main::{$name} = $foo::{$name}; } bar();
But i'm sure it's not efficient for a lot of symbols...