IPC::ほげほげとか

冒頭の「いろんな環境にそれなりにポーティング」に関係するんですけどその幻想をぶち壊してくれたのがIPC系の"標準モジュール"達です.corelist /IPC/で自分が使おうとしてたのを見ると

IPC::Cmd was first released with perl 5.009005
IPC::Open2 was first released with perl 5
IPC::Open3 was first released with perl 5

という感じで流石Perlさんは古くからいろんな環境のことを気にしてくれてたのか,と思って使ったんですがnot implだがなんだかいって運悪く使えない環境に当たってしまいました.どんな環境かはIPC::Cmdの結構最初に書いてあります.見つけたときは残念な気持になりました.んで,凝ったことをするつもりはなかったのでopenでこんな感じのを最近書きました.

#カレントディレクトリの.plなファイルをzipする
my $pid = open($proc, '|zip hoge.zip -@');
print $proc join("\n", glob('*.pl'));
close($proc);

オプションの-@は標準入力にファイルパスを書き込んで,そのファイルをzipしてくれます.なにげにzipコマンドのオプションはよくできています.しかもArchive::Zipを使うよりパフォーマンスよさそうな気がちょっぴりするし.ただ始めに使ったzipコマンドがinfo-zipのzipコマンドのバージョン2.0でファイル名8文字+拡張子3文字までパスにディレクトリを含められないという最悪の仕様でした.そんな古いのはまずないでしょうが注意が必要です.