我有2个perlmodule文件(.pm)。 File_A.pm位于/some/dir/here/File_A.pm。我在/some/other/dir/File_B.pm上有一个File_B.pm。
如果使用if(-r'/some/dir/here/File_A.pm'可以读取File_A.pm,则File_B.pm将其设置为我的%machines哈希值等于/some/dir/here/File_A.pm的%machines ),否则它将使用File_B.pm中定义的标准哈希作为我的%machines =()。
我尝试了下面的代码
但是,这对我不起作用。
package some::other::dir::File_B;
use strict;
use vars qw(@ISA @EXPORT $VERSION);
use Cwd;
use some::dir::File_A;
use Exporter;
$VERSION = 1.0;
@ISA = qw(Exporter);
@EXPORT =
qw(getMachines printMachines getMachineAttributes printMachineAttributes);
if(-r '/some/dir/here/File_A.pm'){
my %machines = do q{/some/dir/here/File_A.pm};
else{
my %machines = (
"some.fqdn.com" => {
role => ["someRole"],
environment => "test",
location => "USA",
os => "Ubuntu",},
)
}
###################################
#I have getMachines, printMachines, getMachineAtrributes, and
#printMachineAttributes below here in my code
####################################
我希望逻辑在可读的情况下使用File_A.pm我的%machines哈希,如果不可读,则不使用备份my%machines哈希。
答案 0 :(得分:1)
用my定义的词汇变量的范围从声明到封闭块的末尾。第一个my %machines
不能在“ then”块中生存,第二个{e1”}在“ else”块的末尾消失。
请注意,如果File_A是恶意用户可写的,则他们可以在其中插入任何代码。使用INI文件或JSON,YAML,XML或其他任何填充哈希值的方法都更安全。