【发布时间】:2012-12-06 17:53:49
【问题描述】:
我正在通过 SNMP 在 Cisco 路由器上查找收集器信息。 我收集信息没有任何问题。问题出在我的 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
);
在表格中。
【问题讨论】:
-
为什么不使用现有的Net::SNMP 模块而不是自己滚动?
-
@Giveme 请注意,sigils
$@%是变量名的一部分,并不是完全 运算符,因此最好删除额外的空间。此外,=~(正则表达式绑定)不同于=赋值和~否定。您的/m选项是货物崇拜编程,在这里没有任何意义,而/s将.的含义更改为“匹配任何内容,包括换行符”。要匹配句点字符.,必须对其进行转义,例如\.。->运算符执行方法调用。array()是 PHPism;要使用它,请在您的代码中写入sub array {wantarray ? @_ : \@_};) -
谢谢你的信息,我在PHP中间。我在 perl 方面还有一些差距;)