use Module::Substitute 'Scalar::Util' => [qw/refaddr openhandle/]; print refaddr $some_object; #### package Module::Substitute; use warnings; use strict; use Data::Dumper; our $VERSION = '0.01'; sub import { my $class = shift; my $calling_package = caller(0); my %module = @_; while ( my ($module, $import_list) = each %module ) { local $Data::Dumper::Terse = 1; $import_list = [$import_list] unless 'ARRAY' eq ref $import_list; my $imports = Dumper($import_list); $imports =~ s/^\[|\]$//g; my $substitute = __PACKAGE__ . "::$module"; eval <<" END_IMPORT"; package $calling_package; use $substitute $imports; END_IMPORT if ( my $error = $@ ) { _croak("Could not substitute ($module): $error"); } } } sub _croak { my $message = shift; require Carp; $Carp::CarpLevel = 1; Carp::croak($message); } 1;