我很害羞,因为你可以告诉我...我正在使用一个脚本来使用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 <<");
};
};
答案 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 <<");
};