in reply to perl beginner question

Several people have already made good suggestions, but this is one of those things with lots of answers.

When the .pm file will not be in the same directory as the main script, I'm fond of using the lib pragma.

When the .pm file will be in the same directory as the main script, it is sometimes easier to skip the package declaration in the module. This will place everything from the module in the "main" package namespace. This is not a good idea for code that will be used in a variety of projects, but may be useful when intended for a group of related scripts that share code.

Replies are listed 'Best First'.
Re^2: perl beginner question
by ikegami (Patriarch) on Jun 02, 2009 at 14:56 UTC

    When the .pm file will not be in the same directory as the main script, I'm fond of using the lib pragma.

    Even when it is in the same directory.

    $ dir test/ total 8 -rw------- 1 eric users 21 2009-06-02 10:53 Module.pm -rwx------ 1 eric users 29 2009-06-02 10:54 script.pl* $ cat test/script.pl #!/usr/bin/perl use Module; $ cat test/Module.pm package Module; 1; $ test/script.pl Can't locate Module.pm in @INC (@INC contains: /home/eric/lib/perl5/i4 +86-linux-gnu-thread-multi /home/eric/lib/perl5 /etc/perl /usr/local/l +ib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/p +erl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl . +) at test/script.pl line 2. BEGIN failed--compilation aborted at test/script.pl line 2.

    It's bad to assume the working directory is set to the directory in which the script resides. Fix:

    use Cwd qw( realpath ); use File::Basename qw( dirname ); use lib dirname(realpath($0));