使用另一个数组循环遍历数组而不加入它们

stu*_*ing 2 arrays perl

我想要做的是使用一个名称数组来循环几个不同的数组.这就是我所拥有的

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";
  }
}
Run Code Online (Sandbox Code Playgroud)

这导致它出错,因为当我想要它寻找的是"@ Sensor1""@ Sensor2"和"@ Sensor3"时,它试图寻找一个名为"@ $ Name"的数组.

FMc*_*FMc 12

我的建议是使用更好的数据结构.例如:

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;
}
Run Code Online (Sandbox Code Playgroud)

另请参阅Mark Jason Dominus的经典:为什么"使用变量作为变量名称"是愚蠢的.关键点在第3部分末尾概述如下:

所有compter编程中最大的问题之一是命名空间管理和数据隐藏.当你使用象征性参考时,你将从硬敲击学校中丢掉四十年的昂贵课程.