Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如果pm库没有显示错误';不存在_Perl - Fatal编程技术网

Perl 如果pm库没有显示错误';不存在

Perl 如果pm库没有显示错误';不存在,perl,Perl,“有趣”的两难选择这一个 要在perl中使用lib,显然需要包含“uselibx”命令。。。但是,如果“x.pm”不存在(或者更准确地说,每次服务器管理员删除一次),您该怎么办 简而言之,我将此文件与.htaccess和其他文件一起“隐藏”在我的帐户根目录下,即“public_html”文件夹下,以防被窥探。因此,我可以在脚本中设置路径,如“use/home/account/x”,一切正常 在过去,我认为安全措施意味着这个文件有时会被删除。因此,当脚本运行时,查看器会看到一个辉煌的“500错误”

“有趣”的两难选择这一个

要在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的版本