имя переменной вызова perl с использованием другой переменной (массива) - PullRequest
0 голосов
/ 26 июня 2019
my @CLASS_TYPES = ("INTRA", "BB", "CAT");
my @INTRA_NEIGH = ("1.1.1.1/32","2.2.2.2/32");
my @BB_NEIGH = ("3.3.3.3/32","4.4.4.4/32" );
foreach my $class (@CLASS_TYPES) {
    my $csv = @.$class._NEIGH;
    print($csv);

когда я печатаю $ csv, я ожидаю напечатать значения массива, как мне этого добиться

1 Ответ

3 голосов
/ 26 июня 2019

Это не правильный подход.См. Почему глупо "использовать переменную в качестве имени переменной" и Более прямое объяснение проблемы .

Тот факт, что @CAT_NEIGH не делает 't Существование иллюстрирует часть проблемы.

Решение:

my @CLASS_TYPES = ("INTRA", "BB", "CAT");
my %NEIGH = (
   INTRA => [ "1.1.1.1/32", "2.2.2.2/32" ],
   BB    => [ "3.3.3.3/32", "4.4.4.4/32" ],
);

for my $class (@CLASS_TYPES) {
   next if !$NEIGH{$class};

   print "$_\n" for @{ $NEIGH{$class} };
}

или просто

my %NEIGH = (
   INTRA => [ "1.1.1.1/32", "2.2.2.2/32" ],
   BB    => [ "3.3.3.3/32", "4.4.4.4/32" ],
);

for my $class (keys(%NEIGH)) {
   print "$_\n" for @{ $NEIGH{$class} };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...