eval関数の本当の使い方!? [基礎編]
★ 前に行動ターゲティングサービスに抵抗を感じると書いたけど、
Google 広告もイヤだったから Ads Preferences で無効にしようとしたら、
英語だけなんですねぇ……不親切だし、Google ってやっぱ何か怖い(^_^;)
eval という、引数をプログラムとして実行する関数を学んでます。
文字列がスクリプトとして解釈・実行される例を試したりしてましたが、
本当の使い方(?)はエラー回避みたいですね。
というわけで、異常終了を回避する例を1つ試してみます。
その前にメモしときたいのが、ゼロ除算について。
例えば $a = 1/0 な式があると、ゼロ除算例外によって
プログラムは終了してしまうんですってね。
なので、まずはゼロ除算がエラーになってしまうかどうか
確認してみました↓
#!/xampp/perl/bin/perl.exe
print"Content-Type: text/html\n\n";
$b = 5;
$c = 0;
$shiki = "$a = $b/$c;";
$shiki = eval($shiki);
print $shiki;
何も出ませんでした……。
#!/xampp/perl/bin/perl.exe
print"Content-Type: text/html\n\n";
$b = 5;
$c = 0;
eval('$a = $b/$c;');
print $a;
これも何も出力されません。
#!/xampp/perl/bin/perl.exe
print"Content-Type: text/html\n\n";
$b = 5;
$c = 0;
$shiki = "$a = $b/$c;";
eval($shiki);
print $shiki;
確認のつもりで一応やってみたこれはこうなりました↓
= 5/0;
ということで、こういった異常終了を回避してみたいと思います↓
#!/xampp/perl/bin/perl.exe
print"Content-Type: text/html\n\n";
$b = 5;
$c = 0;
$shiki = "$a = $b/$c;";
eval($shiki);
if($@)
{
print "異常終了してしまいました~(>_<)";
}
else
{
print "正常です(^^)v";
}
結果はこちら↓
異常終了してしまいました~(>_<)
eval関数から処理が戻って、プログラムは続いてますね。
eval で実行させるスクリプトに問題が起こったかどうかは
$@ でチェックでき、
異常だったらエラーメッセージが格納され、
終了が正常だったときは、null文字列が格納されるんだそうです。
eval関数がどういうものかは、何となく理解できた気がします(^^)
<ご案内>----------------------------------------------------------------
【作る】プログラマー学校
----------------------------------------------------------------<ご案内>
【作る】プログラマー学校
----------------------------------------------------------------<ご案内>
こちらのページを参考にさせていただきました↓
4-2. Perl の危険な関数
ありがとうございました<(_ _)>
2012-05-31 16:17
nice!(0)
コメント(0)
コメント 0