I'm so happy with this I have to share it
--
David Nicol 816.235.1187
"... raised indoors and tested by certified technicians"
package Pollute::Persistent;
use 5.006;
use strict;
no strict 'refs';
no warnings; # all those subroutine redefinitions :)
use vars qw/$Package %Before/;
our $VERSION = '0.03';
sub import{
my ($Package) = caller;
my %Before = map {($_,1)} keys %{"${Package}::"};
*{"${Package}::import"} = sub {
my %Symbols; # will be remembered in closure
foreach (keys %{"${Package}::"}){
$Before{$_} and next;
$Symbols{"${Package}::$_"} = $_ ;
# print "will set *{\"PACKAGE::$_\"} to *{${Package}::$_} \n";
};
undef %Before;
*{"${Package}::import"} =
sub { # may give a redef. warning
($Package) = caller;
foreach (keys %Symbols) {
# print "setting *{\"${Package}::$Symbols{$_}\"} =
*{$_}\n";
*{"${Package}::$Symbols{$_}"} = *{$_};
};
};
goto &{"${Package}::import"};
};
};
1;
__END__
=head1 NAME
Pollute::Persistent - Perl extension to re-export imported symbols
=head1 SYNOPSIS
use Pollute::Persistent;
use This;
use That;
use TheOther;
# exports anything imported from This, That or TheOther
=head1 DESCRIPTION
On use, all the symbols in the caller's symbol table are listed into
%Pollute::Before, and the Pollute subroutine is exported (through direct
symbol table manipulation, not through "Exporter.")
Pollute::Persistent rewrites its caller's import routine.
for later use. Example:
In one file, called MyFavoriteModules.pm:
package MyFavoriteModules;
use Pollute::Persistent;
use fred;
use jim;
use shiela;
In another file:
use MyFavoriteModules; # imports all symbols exported by fred, jim and shiela
In yet another file:
use MyFavoriteModules; # uses newly-defined import function.
=head2 EXPORT
Pollute::Persistent clobbers its caller's import routine.
=head1 AUTHOR
David Nicol, <lt>[EMAIL PROTECTED]<gt>
=head1 LICENSE
GPL/Artistic. Enjoy.
=head1 SEE ALSO
L<perl>.
=cut