Perlについての質問箱 9箱目
■ このスレッドは過去ログ倉庫に格納されています
0047デフォルトの名無しさん
NGNG(1) $word()の戻り値が偽だったときにdieしてしまう。
(2) $wordの値がhoge,hage,fooo以外だがたまたま定義されているサブルーチン名だったときは
それが呼ばれてしまう
(3) それどころか$wordにとんでもないプログラムの断片が含まれていたらそれがそのまま実行される
たとえば$wordの値が'system "rm -rf /"; hoge'だったら...((((;゜Д゜))))ガクガクブルブル
ということでその置き換えはもとのとはかなり振る舞いが違うものになってしまっている。
たぶん$wordの値がその3つの値のどれかであるか調べるところはちゃんと
書かないとだめ。もちろん$wordの値になにか仮定をして良ければある程度
はサボれる可能性はあるけどね。
$wordが3つの値のどれかであることが保証されれば、呼び出しはevalを使うまでも
なく &$word() で十分。
if ($word eq 'hoge' || $word eq 'hage' || $word eq 'fooo') { &$word(); }
else { die; }
とか、だらだらeqを並べるのがかっこ悪いならあらかじめ
%CHECK = (hoge=>1, hage=>1, fooo=>1); というハッシュを用意しといて
$CHECK{$word} or die;
&$word();
といったあたりかな。
■ このスレッドは過去ログ倉庫に格納されています