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