$expect_out(1, string) を使用して、次の例のサブパターン グループ 1 を出力しようとしました。しかし、プログラムは "$expect_out(1, string)" を取りませんでした。代わりに (1,string) を出力しました (以下の出力を参照)。
サブパターン グループ 1 (「SunOS」) を出力する方法についてのアイデア。
後方参照のためにグループ 1 を示すために、検索パターンに括弧を入れました。内部デバッグ(出力)は、フレーズを正しくキャッチしたことを示しているように見えましたが、それを出力する方法がわかりません。
ありがとう、
#!/usr/bin/perl
use Expect;
my $exp = new Expect;
# Begin: 2 lines for debugging only
$exp->exp_internal(1);
$exp->log_file("./expect_log.txt");
# End: 2 lines for debugging only
$exp->spawn("uname -a");
$exp->expect(10, '-re', "^(SunOS).*") or print "\nNot found!\n";
print "$expect_out(1, string)\n";
出力:
unix-machine% test_expect.pl
SunOS unix-machine 5.12 Generic_000000-00 sun4u sparc SUNW,SPARC-Bus
(1, string)
内部デバッグをオンにした出力:
86 unix-machine% test_expect.pl
Spawned 'uname -a'
spawn id(3)
Pid: 25613
Tty: /dev/pts/169
at /home/user/PERL/lib/Expect.pm line 181
Expect::spawn('Expect=GLOB(0x2b2040)', 'uname -a') called at test_expect.pl line 10
Starting EXPECT pattern matching...
at /home/user/PERL/lib/Expect.pm line 561
Expect::expect('Expect=GLOB(0x2b2040)', 10, '-re', '^(SunOS).*') called at test_expect.pl line 11
spawn id(3): list of patterns:
#1: -re `^(SunOS).*'
spawn id(3): '
match:
pattern #1: -re
^(SunOS).*'? いいえ。
SunOS unix-machine 5.10 Generic_000000-00 sun4u sparc SUNW、SPARC バス
spawn id(3): SunOS unix-machine 5.12 Generic_000000-00 sun4u sparc SUNW,SPARC-Bus\r\n'
match:
pattern #1: -re
^(SunOS).*'? はい!!一致文字列の前: '
Match string:
SunOS unix-machine 5.12 Generic_000000-00 sun4u sparc SUNW,SPARC-Bus\r' 一致文字列の後: \n'
Matchlist: (
SunOS') (1, string)