SSブログ

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関数がどういうものかは、何となく理解できた気がします(^^)


<ご案内>----------------------------------------------------------------

tukuru.jpg

【作る】プログラマー学校

----------------------------------------------------------------<ご案内>



こちらのページを参考にさせていただきました↓
4-2. Perl の危険な関数
ありがとうございました<(_ _)>




nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。