package other; $VAR = 'SCALAR'; @array = ('ARRAY') x 4; my @exports = qw ($VAR @array); sub import { no strict 'refs'; my $used_name = shift; # Remove the use name my $that_pack = caller(); foreach (@exports){ m/^([\@\$\*\&\%])(\w+)/; my ($t,$v) = ($1,$2); # Selectively assign to typeglobs. *{$that_pack.'::'.$v} = $t eq '@' && \@{$v} || $t eq '%' && \%{$v} || $t eq '&' && \&{$v} || $t eq '$' && \${$v} || $t eq '*' && \*{$v}; } } package main; other::import(); foreach (sort keys %main::){ print __PACKAGE__,"\:\:$_ = $main::{$_}\n"; } warn "\$VAR is $VAR"; warn join(", ",@array);