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, $/);