Perlでevalを使ってみる

Tsukasa OISHI

続・初めてのPerl 改訂版

続・初めての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!

 土日は旅行に出かけるので、今日、不在者投票をしてきました。

 ボクシングの亀田兄弟がテレビに出ています。彼らを見るたびに、ぼくは弟たちを思い出す。ぼくの弟たちは、あの亀田兄弟に顔も喋り方も言うこともよく似ているのです。他人とは思えん。