Perlでevalを使ってみる
続・初めてのPerl 改訂版
Randal L. Schwartz, brian d foy, Tom Phoenix, 吉川 英興, 伊藤 直也, 田中 慎司, 株式会社ロングテール/長尾 高弘
オライリー・ジャパン
大型本
2006-10-21
「 「続・初めてのPerl 改訂版」」を使ってPerlの勉強をしています。今日はevalについて。evalは関数で、ブロック内や文字列内をPerl構文として評価するのだけど、このあたりはRubyと一緒。でもRubyでは全然evalを使ったことがないので、初めてみたいなものです。おもしろいのが、eval中のエラーはプログラムが終了せずに、変数$@にエラーメッセージが格納されるところ。例外処理みたいに使えるようです。
#!/usr/bin/perl
my ($a, $b) = @ARGV;
my $c = eval{$a / $b};
if ($@) {
print "err:$@";
} else {
print "$c\n";
}
print "here is end of program!\n";
普通は0で除算する時点でエラーが発生してプログラムが終了しますが、evalを使うとエラーメッセージを表示して、さらに処理を続行することができます。ただし、Perl自身が停止するような致命的なエラーはキャッチできないとのこと。
[tsukasa@] $ ./test.pl 10 2
5
here is end of program!
[tsukasa@] $ ./test.pl 10 0
err:Illegal division by zero at ./test.pl line 4.
here is end of program!
土日は旅行に出かけるので、今日、不在者投票をしてきました。
ボクシングの亀田兄弟がテレビに出ています。彼らを見るたびに、ぼくは弟たちを思い出す。ぼくの弟たちは、あの亀田兄弟に顔も喋り方も言うこともよく似ているのです。他人とは思えん。