package My::Package::Version;
use strict;
use vars qw(@ISA @EXPORT $VERSION);
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw($VERSION);
$VERSION = 3.14;
sub import {
my $i = 0;
my $pkg = caller(0);
print "Import Caller Trace:\n";
while($pkg) {
print " Called from package $pkg\n";
# Note that these tests have been moved from the
# loop condition to inside the loop so the loop
# will not terminate if it fails.
if($pkg =~ /^My::Package::/ and not defined ${"$pkg\::VERSION"}) {
print " (Exporting VERSION to $pkg)\n";
__PACKAGE__->export_to_level($i+1);
}
$pkg = caller(++$i);
}
}
####
package My::Package::B;
use My::Package::Version;
print "My::Package::B loaded.\n";
1;
####
package My::Package::A;
use My::Package::B;
@ISA = ('My::Package::B');
print "My::Package::A loaded.\n";
1;
####
#!/usr/bin/perl
use lib '.';
use My::Package::A;
print "\$My::Package::A::VERSION = $My::Package::A::VERSION\n";
####
Import Caller Trace:
Called from package My::Package::B
(Exporting VERSION to My::Package::B)
Called from package main
Called from package main
Called from package My::Package::A
(Exporting VERSION to My::Package::A)
Called from package main
Called from package main
Called from package main
Called from package main
Called from package main
My::Package::B loaded.
My::Package::A loaded.
$My::Package::A::VERSION = 3.14