引用在另一个Perl Module文件中创建哈希的Perl模块,该文件将哈希设置为等于该哈希

时间:2019-06-11 22:22:33

标签: perl hash package perl-module exporter

我有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哈希。

1 个答案:

答案 0 :(得分:1)

my定义的词汇变量的范围从声明到封闭块的末尾。第一个my %machines不能在“ then”块中生存,第二个{e1”}在“ else”块的末尾消失。

请注意,如果File_A是恶意用户可写的,则他们可以在其中插入任何代码。使用INI文件或JSON,YAML,XML或其他任何填充哈希值的方法都更安全。