http://qs1969.pair.com?node_id=891829


in reply to Simple Module Tutorial

Thanks to the writer for your trouble. But everyone seems to get it except me. I have tried to duplicate your results.

I have:

- MyScript.pl under /storage/username/PERL_SCRIPTS/dev

- Test.pm under /storage/username/local/perl/site/lib/Test/Test.pm (I just replaced MyModule.pm with Test.pm).

The module code is exactly the same. In MyScript.pl I have added

use lib '/storage/username/local/perl/site/lib'; <p>and typed in the first two cases.</p> <code>perl MyScript.pl
gives: Undefined subroutine &main::func1 called at MyScript.pl line 10

Line 10 is:

print func1(@list),"\n";

after typing "use Test;"

What am I missing here? Also, is the BEGIN command supposed to be used in the Perl script? It gives syntax errors when I try to use it.

Thanks in advance,

Gideon

Replies are listed 'Best First'.
Re^2: Simple Module Tutorial
by toolic (Bishop) on Mar 07, 2011 at 15:25 UTC
    "Test" is a poor choice of a module name because there is a Core module of the same name (Test) which is part of the standard Perl distribution. Furthermore, since you placed your .pm file under a directory named "Test", you would need to type use Test::Test;. I strongly recommend you change the name of your module to something more unique in order to avoid this naming collision.

      Dear toolic,

      Thank you for your reply. I now have changed all instances of "Test" with "MyModule" and also changed the name of the module. MyModule.pm is now situated on

      /storage/username/local/perl/site/lib

      and I use

      use lib '/storage/username/local/perl/site/lib'; with the second case (as per the example):
      # case 2 use MyModule; print func1(@list),"\n"; print MyModule::func2(@list),"\n";

      but I still get the same error: Undefined subroutine &main::func1 called at MyScript line 15.

      Just to make sure I copied the module exactly from the example but to no avail. Interestingly, when I comment out the print func1 part, the line after that produces correct output. I hope that someone could point out to me where I am at fault.

      Best regards,

      Gideon

        You didn't copy the example exactly!

        You copied case 1. Your code does not export any functions, just as the Tutorial says it won't. You need to export the functions before you try to use them that way:

        use MyModule qw(&func1);

      Hi toolic

      For some reason I can't reply to your latest post but thanks a mil! I did copy the module exactly but not the script. Somehow I mixed up case 1 and case 2. I expected case 1 not to work but case 2 but instead of coding

      use MyModule qw(&func1);

      I simply used

      use MyModule;

      Thanks a lot for pointing it out, it seems to work now. I have learned quite a bit.

      Best regards,

      Gideon