Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^2: How not to hardcode a package name?

by betterworld (Curate)
on Aug 28, 2008 at 16:02 UTC ( [id://707528]=note: print w/replies, xml ) Need Help??


in reply to Re: How not to hardcode a package name?
in thread How not to hardcode a package name?

Maybe yet another layer of abstraction might make it even nicer:

package Array::Extract; my $worker_pkg; my $priority = -1; sub import { my ($class, %args) = @_; if (exists $args{priority}) { # Register new implementation if ($args{priority} > $priority) { $worker_pkg = caller; $priority = $args{priority}; } } else { warn "Using $worker_pkg, priority $priority\n"; $class->SUPER::import(ARRAY => $worker_pkg); } } # Worker.pm package Array::Extract::Worker; use Array::Extract priority => 1; # somewhere else use Array::Extract::Worker; # has to be used first use Array::Extract;

This avoids these global variables that have been described as "action at a distance". Using "priority", you can even have several implementations, and it will choose the one with the highest priority; but that's just an extra bonus, it'll work without priorities too.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://707528]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (4)
As of 2024-04-24 18:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found