Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Factory Pattern

by Corion (Patriarch)
on Jun 21, 2006 at 10:40 UTC ( [id://556623]=note: print w/replies, xml ) Need Help??


in reply to Factory Pattern

You shouldn't have the %animal_sounds as a global variable in the main namespace (main:: or ::), but maybe have it as a global variable in the Animal:: namespace. You don't need the BEGIN blocks around your animal registration section, and you also don't break stricture.

Personally, I would use any of the Pluggable modules, like Module::Pluggable, especially when you want new plugins to become automatically discovered when they are available:

package Animal; use Carp qw(croak); use Module::Pluggable require => 1, search_path => 'Animal', sub_name => known_animals; # use Memoize; # memoize('known_animals'); my @known_animals = __PACKAGE__->known_animals; my %animal_sounds; for my $animal (@known_animals) { for my $sound ($animal->sounds) { croak "Ambigous sound '$sound' ($animal / $animal_sounds{$soun +d})" if exists $animal_sounds{$sound}; $animal_sounds{$sound} = $animal; }; }; # and in a separate file Animal/Dog.pm: package Animal::Dog; sub sounds { 'woof' };

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (7)
As of 2024-04-24 00:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found