http://www.perlmonks.org?node_id=566551


in reply to Module 'use' chains

A simpler method is to just leave off the package line in your Include module. The module automatically starts in the package of the caller, and thus the chain-included modules will automatically export to the correct place.

# test.pl use warnings; use strict; package foo; use Include; funcA(); funcB(); funcC();

# Include.pm use myA; use myB; use myC; 1;

package myA; use base 'Exporter'; our @EXPORT = qw(funcA); sub funcA { warn "funcA"; } 1;

package myB; use base 'Exporter'; our @EXPORT = qw(funcB); sub funcB { warn "funcB"; } 1;

package myC; use base 'Exporter'; our @EXPORT = qw(funcC); sub funcC { warn "funcC"; } 1;

Output:

funcA at myA.pm line 7. funcB at myB.pm line 7. funcC at myC.pm line 7.

bbfu
Black flowers blossom
Fearless on my breath

Replies are listed 'Best First'.
Re^2: Module 'use' chains
by ikegami (Patriarch) on Aug 10, 2006 at 05:40 UTC

    That will only work the first time use is called. Replace
    use Include;
    with
    BEGIN { do 'Include.pl'; }

Re^2: Module 'use' chains
by tilly (Archbishop) on Aug 10, 2006 at 05:33 UTC
    Perl really works like that? (Tests.) Ugh.

    But note that that only works if the package is used only from within one package.

      You're right. I should have tested it more thoroughly.

      bbfu
      Black flowers blossom
      Fearless on my breath