As I started working on a new Unix system yesterday I needed to know if that system had certain Perl modules installed on it that I needed. In my case the specific Perl modules I needed were SOAP::Lite
and the Error
module.
One way to find out was to just install my Perl program and then try to run it, but because I knew I needed these modules beforehand I just ran the following commands to see if these modules were installed on this HP-UX system:
perl -e 'use SOAP::Lite;'
and
perl -e 'use Error;'
If I run these commands on a system that has SOAP::Lite
and Error
installed, Perl will simply return from these commands without printing any output. This lack of output indicates that Perl was able to successfully find (and use) this module -- there's no reason to show an error message because these commands will normally run inside of a larger script, and when there's no errors there's also no need for error output.
However, if I try the same command with a module that doesn't exist, like this:
perl -e 'use Foo::Bar::Baz;'
I'll get some output that looks like this:
Can't locate Foo/Bar/Baz.pm in @INC (@INC contains: /sw/lib/perl5 /sw/lib/perl5/darwin /System/Library/Perl/5.8.8/darwin-thread-multi-2level /System/Library/Perl/5.8.8 /Library/Perl/5.8.8/darwin-thread-multi-2level /Library/Perl/5.8.8 /Library/Perl /Network/Library/Perl/5.8.8/darwin-thread-multi-2level /Network/Library/Perl/5.8.8 /Network/Library/Perl /System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level /System/Library/Perl/Extras/5.8.8 /Library/Perl/5.8.6/darwin-thread-multi-2level /Library/Perl/5.8.6 /Library/Perl/5.8.1 . at -e line 1. BEGIN failed--compilation aborted at -e line 1.
The general case
So, in the most general case, if you're trying to determine whether a Perl module named Foo
is available for you to use, just use this command to check:
perl -e 'use Foo;'
How to modify your @INC include path
The final thing to remember is that if this message comes back with an error, it doesn't exactly mean that this module isn't installed on the current system, it just means that the module isn't in your @INC
include path. If that happens to be these case, this article shows how you can modify your @INC include path.