#!perl use 5.012; # //, strict, say use warnings; use FindBin; use lib "$FindBin::Bin/lib"; use Mod11146642::All; # Mod11146642::One uses Exporter # Mod11146642::Two uses manual import() # but both work through Mod11146642::All oneFunction(); twoFunction(); #### package Mod11146642::All 1.00; use 5.012; # //, strict, say use warnings; use Exporter 5.47 qw(import); my %colons; my @inherited; BEGIN { $colons{$_} = $_ for keys %::Mod11146642::All::; } use Mod11146642::One; use Mod11146642::Two; BEGIN { for (sort keys %::Mod11146642::All::) { next if /^__ANON__$/; # ignore anonymous functions next if exists $colons{$_}; # ones that were in the namespace before weren't inherited push @inherited, $_; # if we're here, we inherited this } # local $" = ","; warn "inherited (@inherited)\n"; # un-comment this line if you want to debug the ineritance check } our @EXPORT = @inherited; 1; #### package Mod11146642::One 1.00; use 5.012; # //, strict, say use warnings; use Exporter 5.47 qw(import); our @EXPORT = qw(oneFunction); sub oneFunction { local $" = ","; printf STDERR "Called %s(@_)\n", (caller(0))[3]; } 1; #### package Mod11146642::Two 2.00; use 5.012; # //, strict, say use warnings; sub twoFunction { local $" = ","; printf STDERR "Called %s(@_)\n", (caller(0))[3]; } sub import { my ($pkg) = @_; my $callpkg = caller(0); no strict 'refs'; my $exportfunction = $callpkg . '::twoFunction'; *{$exportfunction} = \&twoFunction; } 1;