如果pm库不存在则显示错误

时间:2016-02-26 12:05:39

标签: perl

"有趣"这个困境

要在perl中使用lib,你显然要包含"使用lib x"命令......但是如果" x.pm"你能做什么?不存在,(或者服务器管理员删除的机会更正确)

总之,我隐藏了'此文件包含.htaccess和我帐户根目录中的其他文件,即" public_html"文件夹 - 远离窥探眼睛。所以我可以在脚本中设置路径,例如"使用/ home / account / x"一切都很好。

过去,我认为安全措施意味着有时会删除此文件。因此,当脚本运行时,观看者会看到一个光荣的" 500错误"

我试过了:

 If (-e 'use /home/account/x'){
 use 'home/account/x';
 ...
 }
 else{
 print "error";
 }

但所有这一切都表示它无法在下面的行中找到使用命令"如果"

尝试:

use 'home/account/x' || die ('cannot find file')

但是这种语法错了。这有什么简单的方法吗?

2 个答案:

答案 0 :(得分:5)

这与发现错误的时间有关。' use发生在编译时间。因此 - 你不能完成许多你正常的程序流程。 (有一些例外)。

但是你可以做的是require在运行时加载东西 - 在那里你可以进行你想要的那种测试。

#!/usr/bin/env perl
use strict;
use warnings;

eval { require "Not_here.pm" };
warn "Couldn't load: $@" if $@;
print "fish";

尽管如此,在import模块之后,您可能还需要requiring所需的例程,因为use会这样做:

 BEGIN { require Module; Module->import( LIST ); }

答案 1 :(得分:2)

我使用字符串eval来检查模块是否存在,如果没有它就可以运行。

our $have_unac = 0;
BEGIN {
    eval "use Text::Unaccent::PurePerl";
    $have_unac = 1 if (!$@);
}