Perl Cookbook の 19.6. Executing Commands Without Shell Escapes によると、system() にはコマンド文字列をリスト形式で渡したほうが安全だとある。私が人に教えるときも、system() を使うときにはリスト形式を使うよう 強く勧めている。 ところが先日、問題が発覚した。system() の中で標準出力をファイルにリダイレクトしたいのだが、リスト形式だとうまくいかないというのだ。 言われて直ぐにちょこっと調べてみたのだが、確かにうまくいかない。 system("ls -l > /tmp/ls.log"); ということを、リスト形式で実現したいと言うのだが。 system("ls", "-l", ">", "/tmp/ls.log"); なんてやり方でやると ls: >: No such file or directory と言