$sym = "${callpack}::$sym" unless $sym =~ /::/; *$sym = ( $ch eq "\$" ? \$$sym : $ch eq "\@" ? \@$sym : $ch eq "\%" ? \%$sym : $ch eq "\*" ? \*$sym : $ch eq "\&" ? \&$sym : do { require Carp; Carp::croak("'$_' is not a valid variable name"); }); #### perl -Mstrict -Wle 'BEGIN { *main::x = \$main::x; } $x = 42;' #### Variable "$x" is not imported at -e line 1. Global symbol "$x" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors. #### perl -Mstrict -Wle 'BEGIN { package ARBITRARY_PACKAGE_NAME; *main::x = \$main::x; } $x = 42;'