perlで例外処理を行う

例外処理機構のないperlで、例外処理と同じようなことをするにはどうすえば良いか。
結論としてはevalを使用すれば良い。

サンプルコード

#!/usr/bin/perl

use strict;
use warnings;

# エラーが発生する場合
eval {
1/0;
};

if ($@) {
print "Error1: $@";
} else {
print "Success1\n";
}

# エラーが発生しない場合
eval {
1/1;
};

if ($@) {
print "Error2: $@";
} else {
print "Success2\n";
}

実行結果

Useless use of division (/) in void context at ./eval_test.pl line 8.
Error1: Illegal division by zero at ./eval_test.pl line 8.
Success2

evalを使わないとどうなるか?

そこで処理が終了するので、後続の処理は実行されない。
上記サンプルの場合、0除算で処理が終了するので、二つ目の割り算は実行されない。よって、Success2というメッセージも表示されない。