Estimable Monks,
For brevity in code, I've been using some aliases of the
following form in the main namespace of a project:
#### Main.pm
package main;
*tn = \%Track::by_name;
*ti = \%Track::by_index;
*bn = \%Bus::by_name;
print $tn{Master}->name # Master
Up to now, I used 'our' to give all packages
access to these aliases via the main namespace:
#### ChainSetup.pm
package main;
our (%tn, %ti, %bn);
package ChainSetup;
my $master_fader = $tn{Master};
But now, I am refactoring this to use Exporter.
#### Globals.pm
package Globals;
use Exporter;
our @ISA = 'Exporter';
our @EXPORT_OK = qw( %tn %ti %bn);
#### Main.pm
use Globals qw(%tn %ti %bn);
*tn = \%Track::by_name;
*ti = \%Track::by_index;
*bn = \%Bus::by_name;
#### ChainSetup.pm
package ChainSetup;
use Globals qw(%tn %ti %bn);
print $tn{Master}->name; # can't do method 'name' on undef
I'm looking for a way to create these aliases in each
namespace without using boilerplate. I'd like
use Globals to accomplish this.
I tried some code like this:
#### Globals.pm
package Globals;
use Exporter;
our @ISA = 'Exporter';
our @EXPORT_OK = qw( %tn %ti %bn);
my $pkg = caller();
my $code = '*' . $pkg . '::tn = \%Track::by_name';
eval $code;
die "error: $@ in eval of code: $code" if $@;
However, executing
use Globals does not appear
to provide the package name to
caller() in Globals.pm.
I hope this explanation is sufficiently intelligible, and
would be grateful for any advice you may have.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.