package Package::ToBeReRequired1; use strict; use Carp(); use Package::ReRequire( CLUCK => 0, METHOD => 0, CONDITION => 0, THING => 'default_thing', ); sub get_sub { use warnings; return sub { my( $self ) = @_ if METHOD; my( $output ) = ( METHOD ) ? $self : ''; if( CONDITION ) { $output .= ' CONDITION '; }; $output .= ' UNCONDITIONAL '; $output .= THING; Carp::cluck __CALLER__ . ' clucking ' if CLUCK; return $output; }; } 1; __END__ #### package Package::ReRequire1; use strict; use warnings; # use Data::Dumper; $Data::Dumper::Terse=1; use Package::ReRequire(); sub import { Package::ReRequire::rerequire( 'Package::ToBeReRequired1', CLUCK => 0, METHOD => 0, CONDITION => 1, THING => __PACKAGE__, ); *function = Package::ToBeReRequired1::get_sub(); } 1; __END__ #### package Package::ReRequire2; use strict; use warnings; # use Data::Dumper; $Data::Dumper::Terse=1; use Package qw[ReRequire]; sub import { ReRequire::rerequire( 'Package::ToBeReRequired1', CLUCK => 1, METHOD => 1, CONDITION => 0, THING => __PACKAGE__, ); *method = Package::ToBeReRequired1::get_sub(); } 1; __END__ #### $ perl -Mwarnings -e ' use B::Deparse; use Package::ReRequire1; printf( "%s = %s\n", $_, B::Deparse->new->coderef2text( \&{ "Package::ReRequire1::" . $_ } ) ) for keys %{ "Package::ReRequire1::" };' function = { package Package::ToBeReRequired1; BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"} use strict 'refs'; '???'; my($output) = ''; do { $output .= ' CONDITION ' }; $output .= ' UNCONDITIONAL '; $output .= 'Package::ReRequire1'; '???'; return $output; } BEGIN = ; import = { package Package::ReRequire1; BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"} use strict 'refs'; Package::ReRequire::rerequire('Package::ToBeReRequired1', 'CLUCK', 0, 'METHOD', 0, 'CONDITION', 1, 'THING', 'Package::ReRequire1'); *function = Package::ToBeReRequired1::get_sub(); } $ perl -Mwarnings -e ' use B::Deparse; use Package::ReRequire2; printf( "%s = %s\n", $_, B::Deparse->new->coderef2text( \&{ "Package::ReRequire2::" . $_ } ) ) for keys %{ "Package::ReRequire2::" };' BEGIN = ; method = { package Package::ToBeReRequired1; BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"} use strict 'refs'; my($self) = @_; my($output) = $self; '???'; $output .= ' UNCONDITIONAL '; $output .= 'Package::ReRequire2'; Carp::cluck('Package::ReRequire2 clucking '); return $output; } import = { package Package::ReRequire2; BEGIN {${^WARNING_BITS} = "UUUUUUUUUUUU"} use strict 'refs'; ReRequire::rerequire('Package::ToBeReRequired1', 'CLUCK', 1, 'METHOD', 1, 'CONDITION', 0, 'THING', 'Package::ReRequire2'); *method = Package::ToBeReRequired1::get_sub(); } #### $ export CVSROOT=:pserver:anon@bennymack.com:/home/ben/documents/cvsroot $ cvs co my_modules