« video タグからの要求に応える | ホーム | IPC::Cmd では空文字のパラメータを与えられ、るようになった »

2012年1月28日

IPC::Cmd では空文字のパラメータを与えられない

IPC::Cmd (0.72) である command を実行させようとして使ってみたら、どうもおかしい。オプションの位置がずれるかどうかしてしまっている。

調べてみると、コマンドラインを構成する文字列のリストの各要素、それが空文字だと捨てられてしまうようだ。

たとえば次のような、空文字を受け取るコマンドがあるとする:

$ command --opt "" arg1 arg2

これを IPC::Cmd で実行させようとする:

IPC::Cmd::run( command => ["command", "--opt", "", "arg1", "arg2"] );

すると、次のようなコマンドラインが生成されてしまう。

command --opt arg1 arg2

短絡的なパッチは次のような感じになったけれど、この変更がほかのところに影響するかどうか、そこまで見ていないので注意。気味が悪ければ IPC::Open3 などを使った方が、よいだろう。

--- Cmd.pm.orig	2012-01-28 18:06:59.000000000 +0900
+++ Cmd.pm	2012-01-28 18:07:12.000000000 +0900
@@ -1072,7 +1072,7 @@
     $cmd = _quote_args_vms( $cmd ) if IS_VMS;
 
     ### strip any empty elements from $cmd if present
-    $cmd = [ grep { defined && length } @$cmd ] if ref $cmd;
+    $cmd = [ grep { defined } @$cmd ] if ref $cmd;
 
     my $pp_cmd = (ref $cmd ? "@$cmd" : $cmd);
     print loc("Running [%1]...\n", $pp_cmd ) if $verbose;

追記:IPC::Cmd では空文字のパラメータを与えられ、るようになった http://blog.hwat.jp/life/201201/31-233200/

コメントする

OpenID対応しています OpenIDについて

このブログ記事について

このページは、hiroakiが2012年1月28日 18:48に書いたブログ記事です。

ひとつ前のブログ記事は「video タグからの要求に応える」です。

次のブログ記事は「IPC::Cmd では空文字のパラメータを与えられ、るようになった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。