system()

なんかの本にも注意書きが書いてあった気がするんだけどちょっとはまったのでメモ。
perlのsystem()関数は引数の取り方によってビミョーに動作の仕方が変わる。

If there is more than one argument in LIST, or if LIST is an array with more than one value, starts the program given by the first element of the list with arguments given by the rest of the list. If there is only one scalar argument, the argument is checked for shell metacharacters, and if there are any, the entire argument is passed to the system's command shell for parsing (this is /bin/sh -c on Unix platforms, but varies on other platforms). If there are no shell metacharacters in the argument, it is split into words and passed directly to execvp , which is more efficient.
system - perldoc.perl.org

たとえばどっかのディレクトリ下のファイルを全部コピーしたい場合、

$ perl -e 'system("cp", "/path/to/src/*", "/path/to/dest")'
cp: cannot stat `/path/to/src/*': No such file or directory

エラーが出る。こうするとちゃんと動く。

$ perl -e 'system("cp /path/to/src/* /path/to/dest")'

もちろん実際はワンライナーじゃないよ。