Luis Pachas <[EMAIL PROTECTED]> wrote: : I keep getting a function undefined, I used require : and exporter but I kept getting subroutine undefined. : at times in the main:: and in the perl modules.
Exporter works fine. Perhaps you could show us what you did? : I went around this by having the Hash of symbolic : references in the main namespace so it works. You are not using a hash of symbolic references in A.pm. You are using a reference to a hash of code references. : I just need to know if PERL Perl or perl -- never PERL! : allows symbolic reference variables or hashes with : symbolic references to be accessed in the Perl modules : or just in the main. It probably does allow that, but very few people here will help you with symbolic references. They are an advanced topic and generally considered off-topic on this list. : package A; use strict; use warnings; # assumes perl 5.6 and above : my %b; You don't use this hash in this module. : $b = { Never us $a or $b as variables. They have a special meaning in perl and are already in the symbol table. Use descriptive names! $b is not the same as %b. : apple => \&foo1, : oranges => \&foo2, : open => \&foo3 : }; I think you meant this. We use 'our' because we want to access this variable from another module. Note the hash keys are apple, orange, and open. our %fruit; %fruit = ( apple => \&foo1, oranges => \&foo2, open => \&foo3, ); I really wouldn't recommend that hash. It forces you to jump through too many hoops to get things working. The working example below doesn't use a hash. : sub foo1 { : print "apples\n" : } : : sub foo2 { : print "oranges\n" : } : : sub foo3 { : my ($item) = @_; : print $item."\n" : } : : 1; : : ## End Module : : MAIN : : : !#/bin/perl use strict; use warnings; # assumes perl 5.6 and above : lib "$ENV/"; I think you meant the following. It assumes there is something in $ENV. I doubt there is. use lib "$ENV/"; Perhaps this is better. It assumes you are placing your module in a directory named MOD found in the current directory. use lib '.'; : use MOD::A; : : $MOD::A::b{foo1}->(); : $MOD::A::b{foo2}->(); : $MOD::A::b{foo3}->("pairs"); I think you mean 'pears'. It would go better with the fruit theme. $MOD::A::b{foo1} does not exist. A.pm never set %b equal to anything. Therefore, $b{foo1} was never set to a value. $A::b is equal to a hash reference, but foo1, foo2, and foo3 are not it's keys. This will probably fill your needs. package A; use strict; use warnings; sub foo1 { print "apples\n" } sub foo2 { return "oranges\n" } sub foo3 { my $fruit = shift; print "$fruit\n"; } 1; #!/usr/bin/perl use strict; use warnings; use lib './MOD'; use A; A::foo1(); A::foo2(); A::foo3('pears'); __END__ HTH, Charles K. Clarkson -- Mobile Homes Specialist 254 968-8328 -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>