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 に答える