例によって自分用メモ
- 標準出力、標準エラーを同時に扱いたいとき等にopen3を用いる
- $cmd_errがundefの場合標準エラーも$cmd_outで扱われてしまう
- そこでSymbol::gensysなどで初期化するのを忘れない
#!/usr/bin/env perl use strict; use warnings; use IPC::Open3; use Symbol; my $cmd = "ls ./HQ9+ /hoge"; # execute command my ($cmd_in, $cmd_out, $cmd_err) = (gensym, gensym, gensym); open3($cmd_in, $cmd_out, $cmd_err, $cmd); my @out = <$cmd_out>; my @err = <$cmd_err>; printf"=== stdout =============================================\n"; print @out; printf"=== stderr =============================================\n"; print @err; printf"========================================================\n"; close $cmd_in; close $cmd_out; close $cmd_err; [youichi@dell]~/junk% perl open3.pl === stdout ============================================= ./HQ9+: HQ9+ HQ9+~ hoge === stderr ============================================= ls: /hoge: そのようなファイルやディレクトリはありません ======================================================== [youichi@dell]~/junk%