package A;
use Data::Dumper ();
sub Dumper {
print "This is not dumper\n";
}
####
package ibase;
BEGIN {
require base;
*{"_import"} = \&{"base::import"};
for (qw( )) {
*{"$_"} = \&{"base::$_"};
}
}
our $ExportLevel = 0;
sub import
{
my $self = shift;
my $callpkg = caller($ExportLevel);
eval {
$self->_import(@_);
};
for my $key (keys %INC) {
if ($key =~ m|Data/Dumper.pm|) {
*{"$callpkg\::Dumper"} = \&{"Data::Dumper::Dumper"};
}
}
}
1;
####
package A;
use Data::Dumper;
print Dumper \%INC, \@INC;
package B;
use strict;
use ibase 'A';
print Data::Dumper::Dumper(\%A::INC, \%INC);
print Dumper([1]);