Цикл по массиву, используя другой массив, не присоединяясь к ним - PullRequest
2 голосов
/ 09 мая 2011

То, что я пытаюсь сделать, это использовать массив имен для циклического перемещения по нескольким различным массивам.Вот что у меня есть

my @Sensor1 = ("1.2.3.4","1.2.3.5","1.2.3.6");
my @Sensor2 = ("2.2.2.1","2.2.2.2","2.2.2.3");
my @Sensor3 = ("128.0.0.1","128.0.0.2","128.0.0.3");
my @Names = ("Sensor1","Sensor2","Sensor3");
my ($Name, $IP);

foreach $Name (@Names){
  foreach $IP (@$Name){
    print "$Name"," $IP","\n";
  }
}

Это приводит к ошибке, потому что он пытается найти массив с именем "@ $ Name", когда я хочу, чтобы он искал "@ Sensor1" "@ Sensor2"&" @ Sensor3 ".

1 Ответ

12 голосов
/ 09 мая 2011

Мой совет - использовать лучшую структуру данных. Например:

use strict;
use warnings;

my %sensors = (
    Sensor1 => ['1.2.3.4',  '1.2.3.5',  '1.2.3.6'],
    Sensor2 => ['2.2.2.1',  '2.2.2.2',  '2.2.2.3'],
    Sensor3 => ['128.0.0.1','128.0.0.2','128.0.0.3'],
);

for my $sensor_name (sort keys %sensors){
    my $ips = $sensors{$sensor_name};
    print "$sensor_name: $_\n" for @$ips;
}

Также см. Классику от Марка Джейсона Домина: Почему глупо «использовать переменную в качестве имени переменной» . Ключевой момент обобщается в конце части 3 следующим образом:

Одна из самых больших проблем во всех компьютерное программирование - это пространство имен управление и скрытие данных. Когда ты используйте символическую ссылку вы выбрасывая сорок лет дорогого уроки из школы хард Стучит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...