1

我很讨厌 perl,你可能会说...我正在使用脚本来使用 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

4 回答 4

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 <<");
}
于 2012-04-11T03:15:19.943 回答
1

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

map { 
    $s->cmd("interface $_->[0]");
    $s->cmd("description >> WAP - $_->[1] <<");
} 
map { [ $changeme[$_], $changename[$_] ] } 
0..$#changeme
;
于 2012-04-11T03:34:53.660 回答
1
use Algorithm::Loops 'MapCar'; # or MapCarE, MapCarU, etc.

MapCar {
    my ($configDescription, $desName) = @_;
    $s->cmd("interface $configDescription");
    $s->cmd("description >> WAP - $desName <<");
} \@changeme, \@changename;
于 2012-04-11T04:17:49.633 回答
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 <<");
              };
于 2012-04-11T19:33:16.340 回答