sumiyakiの日記: Perlのopenで"-|"や"|-"を使う話 1
日記 by
sumiyaki
Perlのopenに関連して、シェルの渡す特殊記号をエスケープする件について、皆様からコメントをいただきました。ありがとうございました。特にkr氏からはこのコメントにて安全にopenする方法を教えていただきました。大変参考になりました。
この方法について調べてみると、
perl - open my $fh, "comand |"; # はモダンじゃないとか
安全なパイプオープンなどが参考になりました。
Perl 5.8以降は
pen(MD,"-|",ls,"-l","file");
のようにコマンドの引数はリストとして与えることができる。
弾さんの記事には
「書き込むときには'-|',読み込むときには'|-'を」
とあるが逆じゃないかな。
おまけ、
test\
というファイルがあるとすると、
md5sum test\\
とすると、
\d41d8cd98f00b204e9800998ecf8427e test\\
となる(Ubuntu 11.10)。これもちょっとおかしいのかも。どうでもよいことだけど。まあ、スペースのあるファイル名くらいは普通だとしても\とかの入ったファイル名のファイルはかなり普通ではないような。
そもそもシェルを呼び出なさいというのも検討に値する (スコア:0)
Digest::MD5を使うとか。出力をparseする必要もなくなるし。
> コマンドの引数はリストとして与えることができる。
Windowsではこの形式をサポートしていない。まあWindowsで動かす予定がないならmd5sum使っていようがリスト形式の引数でパイプオープン使っていようがかまわないけど。