まで行く必要はありませんopen3
.IIRCは、外部コマンドを読み書きする必要がある場合にのみ使用されます.その場合でも、他の方法があります.
あなたの問題についてはCapture::Tiny
、ブロック内で実行されるものからSTDOUTとSTDERRをキャプチャ(またはティー)できる を使用することをお勧めします。たとえば、質問ごとに:
#!/usr/bin/env perl
use strict;
use warnings;
use Capture::Tiny qw/capture/;
...
my ($stdout, $stderr) = capture {
system ( "snmpwalk -v $version -c $community $hostname $oid" );
};
別の例として、次の機能コードを検討してください。
#!/usr/bin/env perl
use strict;
use warnings;
use Capture::Tiny qw/capture/;
my ($stdout, $stderr) = capture {
system ( "echo 'hello'" );
system ( "date" );
warn "Arg1!";
};
print "STDOUT:\n$stdout";
print "STDERR:\n$stderr";
ちょうど私に与えた:
STDOUT:
hello
Mon Dec 19 23:59:06 CST 2011
STDERR:
Arg1! at ./test.pl line 11.