agianni has asked for the wisdom of the Perl Monks concerning the following question:
I think the code should be pretty self explanitory:
In MyPackage.pm:
package MyPackage; use base qw( Exporter ); @EXPORT = qw( foo ); # create subroutines and export them BEGIN{ for my $sub_name ( qw( bar baz ) ){ *$sub_name = sub { print $sub_name }; push @EXPORT, $sub_name; } } # define a static subroutine for comparison sub foo { print 'foo' } 1;
In export.pl:
#!perl use lib '.'; use MyPackage; foo(); # prints 'foo' MyPackage::bar(); # prints 'bar' bar(); # Generates compile-time warning: # Undefined subroutine &main::bar called at export.pl line 7.
It makes sense to me that this is a problem, as the export must happening before my BEGIN block code is running. So how can I get those subroutines exported? This isn't an XY problem -- I'm working with existing code that I don't have control over that is requiring me to export my functions and I either need to hand code a bunch (hundreds) or get this to work.
Update: Just noticed that using $_ in MyPackage was causing problems. Just updated to declare a lexical.
perl -e 'split//,q{john hurl, pest caretaker}and(map{print @_[$_]}(joi +n(q{},map{sprintf(qq{%010u},$_)}(2**2*307*4993,5*101*641*5261,7*59*79 +*36997,13*17*71*45131,3**2*67*89*167*181))=~/\d{2}/g));'
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Exporting Dynamically Created Subroutines
by chromatic (Archbishop) on Apr 03, 2007 at 18:02 UTC | |
by agianni (Hermit) on Apr 03, 2007 at 18:43 UTC | |
|
Re: Exporting Dynamically Created Subroutines
by ferreira (Chaplain) on Apr 03, 2007 at 17:40 UTC | |
|
Re: Exporting Dynamically Created Subroutines
by philcrow (Priest) on Apr 03, 2007 at 17:52 UTC |