一个整洁的小窍门:
#! /usr/bin/env perl
use strict;
use warnings;
BEGIN {
our $moduleIsMissing;
eval {
require My::Module;
};
if ([email protected]) {
$moduleIsMissing = 1;
}
}
if ($main::moduleIsMissing) {
print "Module is missing. I've got to do something about it!\n"
}
else {
print "Module is there. I'm fine!\n";
}
我不开心关于$main::moduleIsMissing
的事情,但我还没有想出办法解决它。
如果My::Module
可用,它已加载,一切都很好。否则,设置$main::moduleIsMissing
标志。这允许您测试以查看模块是否已加载,如果没有,则采取回避措施。例如,如果模块Term::Cap
可用,您的程序将在打印文本时使用粗体显示,但如果不可用,则只会将文本打印出粗体。
回到一个问题:这是更好的事:
use lib "MyDir";
而非@INC
。
use lib
包含编译时的目录。因此,如果我在目录“MYDIR”模块“富::酒吧”,我可以这样做:
use lib qw(MyDir);
use Foo::Bar;
没有Perl的抱怨。如果我这样做:
push (@INC, qw(MyDir));
use Foo::Bar;;
Perl会抱怨它无法找到我的模块。
'use lib ..'是最好的。您也可以在运行脚本之前设置PERL5LIB环境变量:http://perldoc.perl.org/perlrun.html或者使用-I/path/switch运行perl。 – Alex 2011-06-06 01:20:49
'使用FindBin qw($ Bin);使用lib $ Bin;使用lib“$ Bin /../ lib”;' – tchrist 2011-06-06 04:27:07