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



我有2个perlmodule文件(.pm)。File_A.pm位于/some/dir/here/File_A.pm。我有一个位于/some/other/dir/File_B.pmFile_B.pm

File_B.pm会将其my %machines哈希设置为等于/some/dir/here/File_A.pm%machines,如果File_A.pm可以使用if (-r '/some/dir/here/File_A.pm')否则它将使用File_B.pm内定义的标准哈希作为my %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 哈希(如果它是可读的),如果不使用备份,我的 %machines 哈希,以防 File_A.pm 以某种方式变得不可读。

用我的范围定义的词法变量的作用域,从声明到封闭块的末尾。第一个my %machines在"然后"块中无法幸存下来,第二个在"else"块的末尾消失。

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

相关内容

  • 没有找到相关文章

最新更新