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


in reply to How to alias a whole namespace to another namespace (in this case main::)

This might help.

use strict; use warnings; package PACKAGEA::PACKAGEB; our @test = qw(a b c); our $test = 'def'; our %tset = ('foo' => 'bar'); *PI = \'3.14'; our $PI; print(@test, $/); print($test, $/); print(%tset, $/); print($PI, $/); package main;
my $src_pkg_name = 'PACKAGEA::PACKAGEB'; my $dst_pkg_name = __PACKAGE__; { no strict 'refs'; foreach (keys(%$src_pkg_name)) { my $sym_name = $_; my $src_sym_ref = "$src_pkg_name::$sym_name"; my $dst_sym_ref = "$dst_pkg_name::$sym_name"; my $ref; $ref = *$src_sym_ref{SCALAR}; *$dst_sym_ref = $ref if $ref; $ref = *$src_sym_ref{ARRAY }; *$dst_sym_ref = $ref if $ref; $ref = *$src_sym_ref{HASH }; *$dst_sym_ref = $ref if $ref; $ref = *$src_sym_ref{CODE }; *$dst_sym_ref = $ref if $ref; } }
print(@test, $/); print($test, $/); print(%tset, $/); print($PI, $/);

Update: Oops! I had forgotten to test whether this imports functions -- which would be the most important here!! -- and it doesn't. I'm not sure how to fix ,and I can't look further into it at his moment.