私は 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 は初めてです。