我正在写一个 Munin-Pluging,我喜欢从 telnet 会话中捕获屏幕输出。此类会话的输出如下所示:
...
0x00017 0x41b3f340 BPING 0 0 0 0 198 132 330
0x00018 0x41b47340 CHKFAILED 0 0 0 0 198 132 330
0x00026 0x41b4f340 CIP 0 0 0 0 370 264 634
0x0001e 0x41b57340 CONTROL 0 1 0 0 3876 2178 6054
0x01014 0x41b5f340 UNETSRVR 0 0 0 1 296 198 494
0x00037 0x41b67340 ---- 0 0 0 0 198 132 330
0x00000 0x43b67450 ---- 0 0 0 0 0 0 0
0x00000 0x4bb67450 ---- 0 0 0 0 5084 4224 9308
0x00000 0x49367450 ---- 0 0 0 0 14742 4158 18900
-------------------------------------------------------------------------------------------
SUMMARY : 2 40 5 7 4898229 2728176 7626405
此脚本将屏幕内容提取到一个数组 (@lines) 中。
#!/usr/bin/perl
use Net::Telnet ();
use strict;
use warnings;
my $t = new Net::Telnet (Timeout => 10);
$t->port(777);
$t->open("192.168.0.1");
$t->buffer_empty;
my @lines = $t->waitfor(match =>"m/.* SUMMARY : .* \n/");
my @gagu = grep { "$_" =~ /^.*BPING.*\n/ } @lines;
print @gagu;
- 数组@lines 是什么类型的?
- 为什么我总是从 grep 而不是过滤行中获取全部内容?
- 我从 net:telnet 得到的数组与其他数组不同吗?
是的,我是 Perl 的新手。