>>38
evalは引数をコードとして実行する関数です。
例えば、
$code = q{ $foo = 'bar'; };
eval $code;
だと$foo に'bar'が代入されます。
実行するコードを実行時に変化させたい場合によく使います。
ブロックを引数にするevalもあって
eval { $foo = 'bar'; }
はさっきのコードと同じことをしますが、実行するコードは変えられません。
何に使うのかと言うと、evalで実行時エラーをトラップできるので
例外処理によく使われます。
>>37
単純な例で例えば、CGIのクエリーをそのままevalに渡してしまう例、
use CGI;
$q = CGI->new();
eval $q->query('code');
とすると、攻撃者は任意のコードを実行できてしまいます。
回避方法としては汚染チェックをきちんとすることです。
それさえやっていれば、別にevalの使用を恐れることはないでしょう。