Ссылка на модуль Perl, который создает хэш в другом файле модуля Perl, который устанавливает хэш, равный этому хэшу - PullRequest
0 голосов
/ 12 июня 2019

У меня есть 2 файла perlmodule (.pm). Файл_A.pm находится по адресу /some/dir/here/File_A.pm. У меня есть файл File_B.pm, расположенный по адресу /some/other/dir/File_B.pm.

File_B.pm установит, что мой хэш% машин равен /some/dir/here/File_A.pm% машин, если File_A.pm доступен для чтения с использованием if (-r '/some/dir/here/File_A.pm' ) иначе он будет использовать стандартный хеш, определенный в 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, если он доступен для чтения, и если нет, то использовать резервную копию моего хэша% machines на случай, если File_A.pm каким-то образом станет нечитаемым.

1 Ответ

1 голос
/ 12 июня 2019

Область действия лексической переменной, определенной с помощью my , простирается от объявления до конца окружающего блока.Первый my %machines не переживает блок «then», второй исчезает в конце блока «else».

Обратите внимание, что если File_A доступен для записи злоумышленнику, он может вставить любойкод в это.Для заполнения хэша безопаснее использовать INI-файл или JSON, YAML, XML или любой другой.

...