Perlの場合、setuidが立てられているスクリプトを実行しようとすると、自動的にTaintモードが発動するようである。(OSレベルのsetuidの有効・無効も絡むようではあるが・・・)
http://perldoc.jp/docs/perl/5.6.1/perlsec.pod
http://x68000.q-e-d.net/~68user/unix/pickup?setuid
http://x68000.q-e-d.net/~68user/webcgi/permission.html
などを参照のこと。
で、Taintモードだと
$arg = shift;
これ、汚染されてると見なされるみたい・・・。コマンドライン引数から指定された値を「そのまま」使うのはよろしくない。Taintモードにおいては。