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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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';s模块::加载::条件::检查\u安装是否找到已卸载的模块?_Perl - Fatal编程技术网

为什么perl';s模块::加载::条件::检查\u安装是否找到已卸载的模块?

为什么perl';s模块::加载::条件::检查\u安装是否找到已卸载的模块?,perl,Perl,-->perl-v 这是为x86_64-linux构建的perl 5,版本24,subversion 0(v5.24.0) 我正在尝试有条件地加载一个perl模块,如果它是使用 #!/usr/bin/env perl use strict;

-->perl-v 这是为x86_64-linux构建的perl 5,版本24,subversion 0(v5.24.0)

我正在尝试有条件地加载一个perl模块,如果它是使用

#!/usr/bin/env perl
use strict;                                                                                                                                                                                                                                                                              
use Module::Load::Conditional qw[can_load check_install requires];                                                                                                                                                                                                                       

if(check_install( module => 'dvm_common')) {                                                                                                                                                                                                                                             
    use dvm_common;
    print "Looks like dvm_common is installed, so it was loaded.\n";
} else {
    print "Looks like dvm_common is not installed.\n";
}

exit;
无法编译,抱怨缺少模块

--> perl -c ./mod_load_cond_test.pl
Can't locate dvm_common.pm in @INC (you may need to install the dvm_common module) (@INC contains: etc...  .) at ./mod_load_cond_test.pl line 6.
BEGIN failed--compilation aborted at ./mod_load_cond_test.pl line 6.

我认为使用它的全部目的是在加载模块之前测试模块是否存在?

use
是一个编译时语句,因此解释器将在模块通过源代码并遇到
use
语句时立即加载模块,就像您编写了

 BEGIN { require Module; Module->import }
要在运行时加载模块,可以使用
require

if(check_install( module => 'dvm_common')) {                                                                                                                                                                                                                                             
    require dvm_common;
    dvm_common->can("import") && dvm_common->import;   # optional
    ...
或字符串
eval

if(check_install( module => 'dvm_common')) {                                                                                                                                                                                                                                             
    eval "use dvm_common;1" or die $@;
    ...

use
是一个编译时语句,因此解释器在通过源代码并遇到
use
语句时会立即加载模块,就像您编写了

 BEGIN { require Module; Module->import }
要在运行时加载模块,可以使用
require

if(check_install( module => 'dvm_common')) {                                                                                                                                                                                                                                             
    require dvm_common;
    dvm_common->can("import") && dvm_common->import;   # optional
    ...
或字符串
eval

if(check_install( module => 'dvm_common')) {                                                                                                                                                                                                                                             
    eval "use dvm_common;1" or die $@;
    ...

你能用这个解决你的问题吗?这和将“使用”改为“需要”一样简单吗?似乎有效。你能用这个解决你的问题吗?这和将“使用”改为“需要”一样简单吗?似乎有效。在运行时调用导入没有意义<代码>我的$dvm\U可用;开始{$dvm_avail=check_install(模块=>'dvm_common');}如果$dvm_avail,'dmv_common'使用在运行时调用导入没有意义<代码>我的$dvm\U可用;开始{$dvm_avail=check_install(模块=>'dvm_common');}如果$dvm_avail,'dmv_common'使用