Perl 如果pm库没有显示错误';不存在
“有趣”的两难选择这一个 要在perl中使用lib,显然需要包含“uselibx”命令。。。但是,如果“x.pm”不存在(或者更准确地说,每次服务器管理员删除一次),您该怎么办 简而言之,我将此文件与.htaccess和其他文件一起“隐藏”在我的帐户根目录下,即“public_html”文件夹下,以防被窥探。因此,我可以在脚本中设置路径,如“use/home/account/x”,一切正常 在过去,我认为安全措施意味着这个文件有时会被删除。因此,当脚本运行时,查看器会看到一个辉煌的“500错误” 我试过:Perl 如果pm库没有显示错误';不存在,perl,Perl,“有趣”的两难选择这一个 要在perl中使用lib,显然需要包含“uselibx”命令。。。但是,如果“x.pm”不存在(或者更准确地说,每次服务器管理员删除一次),您该怎么办 简而言之,我将此文件与.htaccess和其他文件一起“隐藏”在我的帐户根目录下,即“public_html”文件夹下,以防被窥探。因此,我可以在脚本中设置路径,如“use/home/account/x”,一切正常 在过去,我认为安全措施意味着这个文件有时会被删除。因此,当脚本运行时,查看器会看到一个辉煌的“500错误”
If (-e 'use /home/account/x'){
use 'home/account/x';
...
}
else{
print "error";
}
但是它所做的只是在“If”下面的一行中找不到use命令
尝试:
use 'home/account/x' || die ('cannot find file')
但这种语法是错误的。有什么简单的方法可以解决这个问题吗?这与何时可以“注意到”错误有关。在编译时发生。因此,你不能做很多正常的程序流的事情,你会做。(有一些例外情况) 但是你可以做的是,在运行时加载东西——在这个时候你可以做你想要的测试
#!/usr/bin/env perl
use strict;
use warnings;
eval { require "Not_here.pm" };
warn "Couldn't load: $@" if $@;
print "fish";
尽管如此,在要求
模块后,您可能还需要导入所需的例程,因为使用
会:
BEGIN { require Module; Module->import( LIST ); }
这与何时可以“注意到”错误有关。在编译时发生。因此,你不能做很多正常的程序流的事情,你会做。(有一些例外情况) 但是你可以做的是,在运行时加载东西——在这个时候你可以做你想要的测试
#!/usr/bin/env perl
use strict;
use warnings;
eval { require "Not_here.pm" };
warn "Couldn't load: $@" if $@;
print "fish";
尽管如此,在要求
模块后,您可能还需要导入所需的例程,因为使用
会:
BEGIN { require Module; Module->import( LIST ); }
我使用string
eval
检查模块是否存在,是否可以在没有它的情况下运行
our $have_unac = 0;
BEGIN {
eval "use Text::Unaccent::PurePerl";
$have_unac = 1 if (!$@);
}
我使用string
eval
检查模块是否存在,是否可以在没有它的情况下运行
our $have_unac = 0;
BEGIN {
eval "use Text::Unaccent::PurePerl";
$have_unac = 1 if (!$@);
}
您也可以使用字符串
eval
来使用。您也可以使用字符串eval
来使用。目前,在得到相反建议之前,我已经将两者“混合”了起来。思想。我使用:eval(需要“x.pm”);if($@){print error}else{BEGIN{eval“use x”}qfrvjqf 1_!l_I1_1nbjm_obsg1_ldhj-ajm1_lnk_fq…要由库no x解码的数据。因此,如果第一个require无法找到文件,则打印一个错误,但如果找到,BEGIN in else语句将加载库并解码数据。它是有效的,但我不知道它是否遵循了正确的惯例。这是不可取的。首先,BEGIN
块将在脚本中的任何其他内容之前运行。其次,在使用后尝试使用它可能会产生副作用。(我对此没有想太多。)你应该使用我的版本或@Sobrique'sAt present——除非有相反的建议——我已经将两者“混合”了起来。思想。我使用:eval(需要“x.pm”);if($@){print error}else{BEGIN{eval“use x”}qfrvjqf 1_!l_I1_1nbjm_obsg1_ldhj-ajm1_lnk_fq…要由库no x解码的数据。因此,如果第一个require无法找到文件,则打印一个错误,但如果找到,BEGIN in else语句将加载库并解码数据。它是有效的,但我不知道它是否遵循了正确的惯例。这是不可取的。首先,BEGIN
块将在脚本中的任何其他内容之前运行。其次,在使用后尝试使用它可能会产生副作用。(我对此没有想太多。)你应该使用我的版本或@Sobrique的版本