CraigWalker has asked for the wisdom of the Perl Monks concerning the following question:
Hello Monks
I'm doing some preliminary tests on factory design pattern with PERL and I've found the following issue. If I implement my factory like this, I have no problem.
package GreetFactory; use strict; use warnings; use lib './Greet'; sub instantiate { my $class = shift; my $requested_type = shift; my $location = "Greet/$requested_type.pm"; $class = "Greet::$requested_type"; require $location; return $class->new(@_); } 1;
But if I implement my factory like that, then a load error is displayed (Can't locate object method "new" via package "lib::Repeat" (perhaps you forgot to load "lib::Repeat"?) at GreetFactory.pm line 13).
package GreetFactory; use strict; use warnings; use lib './lib'; sub instantiate { my $class = shift; my $requested_type = shift; my $location = "lib/$requested_type.pm"; $class = "lib::$requested_type"; require $location; return $class->new(@_); } 1;
Of course, with the 1st test, Repeat.pm is located into a 'Greet' subdirectory, and I rename it 'lib' before doing the 2nd test. Everything happens as if 'lib::' is badly interpreted because 'lib' may be a PERL reserved word ?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Design pattern factory : use lib issue on lib directory
by Eily (Monsignor) on Apr 01, 2016 at 16:32 UTC | |
by CraigWalker (Initiate) on Apr 01, 2016 at 16:43 UTC | |
|
Re: Design pattern factory : use lib issue on lib directory
by Corion (Patriarch) on Apr 01, 2016 at 16:34 UTC | |
|
Re: Design pattern factory : use lib issue on lib directory
by haukex (Archbishop) on Apr 02, 2016 at 08:49 UTC |