我在使用变量引用模块时遇到问题,它似乎混淆了变量的传递:
package TOTO;
use Data::Dumper;
sub print {
print Dumper(@_);
}
Run Code Online (Sandbox Code Playgroud)
package main;
TOTO::print('Hello World');
print ">>>>>>>>>>>\n";
my $package = 'TOTO';
$package->print('Hello World');
Run Code Online (Sandbox Code Playgroud)
输出是:
$VAR1 = 'Hello World';
>>>>>>>>>>>
$VAR1 = 'TOTO';
$VAR2 = 'Hello World';
Run Code Online (Sandbox Code Playgroud)
关于如何避免TOTO作为第一个变量传递的任何建议?
根据是否可以加载某个模块,我想决定是否使用它:
BEGIN {
eval {
require "Bio::EnsEMBL::HDF5";
$hdf5 = "Bio::EnsEMBL::HDF5";
};
if ($@) {
require "Bio::EnsEMBL::HDF5_mockup";
$hdf5 = "Bio::EnsEMBL::HDF5_mockup";
}
}
Run Code Online (Sandbox Code Playgroud)
结果
Can't locate Bio::EnsEMBL::HDF5_mockup in @INC
然而:
use Bio::EnsEMBL::HDF5;
use Bio::EnsEMBL::HDF5_mockup;
Run Code Online (Sandbox Code Playgroud)
工作良好.此外,当我在BEGIN块中切换HDF5和HDF5_mockup时,它始终找到我首先需要的那个,并且找不到第二个.
谢谢你的指针.