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というメッセージも表示されない。