IPC::Open3 / system()の挙動

metacpan.org

Whitespace and IPC::Open3 / system() When using IPC::Open3 or system, if you provide a string as the command argument, it is assumed to be appropriately escaped. You can use the QUOTE constant to use as a portable quote character (see above). However, if you provide an array reference, special rules apply:

制約で引数をスカラで与えた時と、リストで与えた時の処理が変わってしまう。

perldoc.jp

LIST に複数の引数がある場合、または LIST が複数の要素からなる配列の場合、 リストの最初の要素で与えられるプログラムを、リストの残りの要素を引数として 起動します。 スカラの引数が一つだけの場合、引数はシェルのメタ文字をチェックされ、もし あればパースのために引数全体がシステムコマンドシェル (これは Unix プラットフォームでは /bin/sh -c ですが、他のプラットフォームでは 異なります)に渡されます

そのため、リストの場合はシングルクォートなどで囲まないと意図した動作にならない。

cmd -o 'mode arg' -o 'fuga'