单个foreach中的2个数组 - perl

时间:2012-04-11 02:26:34

标签: arrays perl foreach

我很害羞,因为你可以告诉我...我正在使用一个脚本来使用Net :: Application :: Session将更改应用到Cisco设备。我有2个数组,1个是接口,1个是接口描述。我需要输入命令“$ s-> cmd []”,如下所示:

$s->cmd("interface $configDescription");
$s->cmd("description >> WAP - $desName <<");

但我无法弄清楚如何使用foreach语句来做到这一点。以下是我目前正在做的事情,这只会更改数组中的最后一行。请告知...我是这个网站的菜鸟,如果这还不够,请告诉我需要什么。谢谢。

foreach $configDescription (@changeme) {
   foreach $desName (@changename) {
      $s->cmd("interface $configDescription");
      $s->cmd("description >> WAP - $desName <<");
   };
};

4 个答案:

答案 0 :(得分:5)

它们被称为并行数组。

for my $i (0..$#changeme) {
   my $configDescription = $changeme[$i];
   my $desName           = $changename[$i];
   $s->cmd("interface $configDescription");
   $s->cmd("description >> WAP - $desName <<");
}

或:(破坏性)

while (@changeme) {
   my $configDescription = shift(@changeme);
   my $desName           = shift(@changename);
   $s->cmd("interface $configDescription");
   $s->cmd("description >> WAP - $desName <<");
}

答案 1 :(得分:1)

另一种方式,如果你像我一样喜欢map-grep链。

map { 
    $s->cmd("interface $_->[0]");
    $s->cmd("description >> WAP - $_->[1] <<");
} 
map { [ $changeme[$_], $changename[$_] ] } 
0..$#changeme
;

答案 2 :(得分:1)

use Algorithm::Loops 'MapCar'; # or MapCarE, MapCarU, etc.

MapCar {
    my ($configDescription, $desName) = @_;
    $s->cmd("interface $configDescription");
    $s->cmd("description >> WAP - $desName <<");
} \@changeme, \@changename;

答案 3 :(得分:0)

我认为我会将其添加为另一种解决方案,仅用于文档目的。

 use List::MoreUtils qw( each_array );

 my $it = each_array( @changeme, @changename );
              while ( my ($configDescription, $desName) = $it->() ) {
                 $s->cmd("interface $configDescription");
                 $s->cmd("description >> WAP - $desName <<");
              };