在eval中使用Perl require时,无法在@INC中找到库
在eval中使用Perl require时,无法在@INC中找到库,perl,Perl,根据是否可以加载某个模块,我想决定是否使用该模块: BEGIN { eval { require "Bio::EnsEMBL::HDF5"; $hdf5 = "Bio::EnsEMBL::HDF5"; }; if ($@) { require "Bio::EnsEMBL::HDF5_mockup"; $hdf5 = "Bio::EnsEMBL::HDF5_mockup"; } } 这将导致 在@INC中找不到Bio::EnsEMBL::HDF5\
根据是否可以加载某个模块,我想决定是否使用该模块:
BEGIN {
eval {
require "Bio::EnsEMBL::HDF5";
$hdf5 = "Bio::EnsEMBL::HDF5";
};
if ($@) {
require "Bio::EnsEMBL::HDF5_mockup";
$hdf5 = "Bio::EnsEMBL::HDF5_mockup";
}
}
这将导致在@INC中找不到Bio::EnsEMBL::HDF5\u实体模型
然而:
use Bio::EnsEMBL::HDF5;
use Bio::EnsEMBL::HDF5_mockup;
很好。此外,当我在BEGIN块中切换HDF5和HDF5_实体模型时,它始终会找到我需要的第一个实体模型,但找不到第二个。感谢您提供的任何指针。这是因为当您在使用时引用模块时,它将引用的字符串用作实际模块文件的名称。因此,它不是在寻找
Bio/EnsEMBL/HDF5.pm
,而是在@INC
中搜索名为Bio::EnsEMBL::HDF5
的文件
删除引号,使模块名为空字。下面是一个例子:
请注意,模块名称如何未转换为文件路径:
require "Data::Dumper";
Can't locate Data::Dumper in @INC (@INC contains: ...
require Data::Dumperx;
Can't locate Data/Dumperx.pm in @INC (you may need to install the Data::Dumperx module)
现在,在这个例子中,我故意输入了错误的模块名,以便产生错误。请注意模块是如何转换为实际文件路径的:
require "Data::Dumper";
Can't locate Data::Dumper in @INC (@INC contains: ...
require Data::Dumperx;
Can't locate Data/Dumperx.pm in @INC (you may need to install the Data::Dumperx module)
这是因为在使用时引用模块时,它将引用的字符串用作实际模块文件的名称。因此,它不是在寻找
Bio/EnsEMBL/HDF5.pm
,而是在@INC
中搜索名为Bio::EnsEMBL::HDF5
的文件
删除引号,使模块名为空字。下面是一个例子:
请注意,模块名称如何未转换为文件路径:
require "Data::Dumper";
Can't locate Data::Dumper in @INC (@INC contains: ...
require Data::Dumperx;
Can't locate Data/Dumperx.pm in @INC (you may need to install the Data::Dumperx module)
现在,在这个例子中,我故意输入了错误的模块名,以便产生错误。请注意模块是如何转换为实际文件路径的:
require "Data::Dumper";
Can't locate Data::Dumper in @INC (@INC contains: ...
require Data::Dumperx;
Can't locate Data/Dumperx.pm in @INC (you may need to install the Data::Dumperx module)
几乎与
BEGIN {
require Bio::EnsEMBL::HDF5;
import Bio::EnsEMBL::HDF5;
}
及
不等于
# Looks for file "Bio/EnsEMBL/HDF5_mockup.pm"
require Bio::EnsEMBL::HDF5_mockup;
几乎与
BEGIN {
require Bio::EnsEMBL::HDF5;
import Bio::EnsEMBL::HDF5;
}
及
不等于
# Looks for file "Bio/EnsEMBL/HDF5_mockup.pm"
require Bio::EnsEMBL::HDF5_mockup;
如果您使用裸字模块名:
require Bio::EnsEMBL::HDFS,它是否有效
和要求Bio::EnsEMBL::HDFS_实体模型
?如果使用裸字模块名称,它是否有效:要求Bio::EnsEMBL::HDFS代码>和需要Bio::EnsEMBL::HDFS\u实体模型
?哎哟。看不到这一点是停止编码并开始周末生活的必然迹象。谢谢哎哟看不到这一点是停止编码并开始周末生活的必然迹象。谢谢