LIST
の中に 1 以上の引数がある場合、
または LIST
が 1 以上の値を持つ配列の場合、
LIST
中の引数で execvp()
をコールする。
スカラー引数が 1 しかない場合、
引数にシェルのメタキャラクターがあるかどうかチェックされる。
もしあれば、parse するために全引数が `/bin/sh -c' に渡される。
もしなければ、引数は単語毎に分けられ、execvp()
にそのまま渡される。
この方が効率的だからである。
注意:
exec
(および system
)は出力バッファをフラッシュしないので、
出力を失わないために $|
をセットする必要があるかもしれない。
exec '/bin/echo', 'Your arguments are: ', @ARGV;
exec "sort $outfile | uniq";
本当は第一引数を実行したくないが、
プログラムをだましてその名前で実行しているように見せたい時は、
本当に走らせたいプログラム名を変数に代入し、
その変数を LIST
の前にコンマと共に指定すれば良い
(こうすると LIST
にスカラーが一つしかなくても、
LIST
が常に複数の値を持っていると解釈される)。
$shell = '/bin/csh';
exec $shell '-sh'; # ログインシェルのふりをする