2

CiscoルーターのSNMPでコレクター情報を探しています。問題なく情報を収集しています。問題は私の Perl 正規表現にあります。

ここでアレイが受信した SNMP:

$ mystring = 'iso.3.6.1.2.1.2.2.1.2.2 = STRING: "GigabitEthernet1/2"
iso.3.6.1.2.1.2.2.1.2.3 = STRING: "GigabitEthernet3/1"
iso.3.6.1.2.1.2.2.1.2.4 = STRING: "GigabitEthernet3/2"
iso.3.6.1.2.1.2.2.1.2.5 = STRING: "GigabitEthernet3/3"
iso.3.6.1.2.1.2.2.1.2.6 = STRING: "GigabitEthernet3/4"
iso.3.6.1.2.1.2.2.1.2.7 = STRING: "GigabitEthernet3/5"
iso.3.6.1.2.1.2.2.1.2.8 = STRING: "GigabitEthernet3/6"
iso.3.6.1.2.1.2.2.1.2.9 = STRING: "GigabitEthernet3/7"
iso.3.6.1.2.1.2.2.1.2.10 = STRING: "GigabitEthernet3/8"
iso.3.6.1.2.1.2.2.1.2.11 = STRING: "GigabitEthernet3/9"
iso.3.6.1.2.1.2.2.1.2.12 = STRING: "GigabitEthernet3/10"
iso.3.6.1.2.1.2.2.1.2.13 = STRING: "GigabitEthernet3/11"
iso.3.6.1.2.1.2.2.1.2.14 = STRING: "GigabitEthernet3/12"
iso.3.6.1.2.1.2.2.1.2.15 = STRING: "GigabitEthernet3/13"
iso.3.6.1.2.1.2.2.1.2.16 = STRING: "GigabitEthernet3/14"
iso.3.6.1.2.1.2.2.1.2.17 = STRING: "GigabitEthernet3/15"
iso.3.6.1.2.1.2.2.1.2.18 = STRING: "GigabitEthernet3/16" ';
@ array = ($ mystring = ~ m /. ([0-9]|[1-9][0-9]|[1-9][0-9][0-9]) = / gms);
print join ("\ n", @ array);

mib の最新号を持っていますが、ポートを取得するにはどうすればよいですか? 例えば

array(    
5->GigabitEthernet3/3
6->GigabitEthernet3/4
);

テーブルで。

4

1 に答える 1

2

配列と呼ばれるものは、実際には連想配列です。ハッシュ テーブルは、連想配列の形式です。

use strict; use warnings;
my %port_by_mib;
for (split /\n/, $mystring) {
    my ($mib) = /\.(\d+) / or die;
    my ($port) = /"([^"]+)"/ or die;
    $port_by_mib{$mib} = $port;
}

説明:

  • use strictPerl をより厳密なモードで実行します。これにより、危険またはエラーが発生しやすい機能が禁止されます。use warningsスクリプトのデバッグに役立つ警告を発行します。
  • キーワードはmy字句変数を宣言します。厳密モードでは、変数を宣言する必要があります。名前を宣言するのを忘れると、global symbol "$foo" requires explicit package name ...致命的なエラーが発生します。
  • %、ハッシュ テーブルの印です。シジルは、型宣言と名前空間セレクターの両方です。
  • split$mystring正規表現が一致するたびにカットします。結果の部分文字列のリストをループし、各部分をデフォルトforの引数に割り当てます。$_
  • 正規表現/\.(\d+) /は、ドットが前にあり、スペースが後に続く数字のシーケンスに一致し、保存します。dieそのような一致が見つからない場合、スクリプトは s (致命的なエラーをスロー) します。割り当ての左側にはリスト コンテキストがあるため、RHS もリスト コンテキストで実行され$mib、最初のキャプチャ バッファで初期化されます。
  • 正規表現/"([^"]+)"/は、二重引用符で囲まれたテキストに一致し、そのテキストを抽出します。
  • ハッシュ テーブルは、配列のように角かっこではなく、中かっこでアクセスします。
于 2012-12-06T17:58:12.530 に答える