読者です 読者をやめる 読者になる 読者になる

Perlでtry...catch

Perlにはtryとcatchの例外処理構文はありません。


必要なら自分で書きます。(もちろん普通はeval{...};if($@){...}で十分です)

#!/usr/bin/perl
use strict;
use warnings;
use Switch;

## try...catch構文を定義(ラクダ本???ページより)
sub try(&$){
    my ($try, $catch) = @_;
    eval { &$try };
    if($@){
        local $_ = $@;
        &$catch;
    }
}
sub catch(&){ $_[0] }


## 使用例
try {
    die "ERR1";
}
catch {
    switch ($_) {
        case /ERR1/ { print "ERR1 !!!\n" }
        case /ERR2/ { print "ERR2 !!!\n" }
        else        { print "unknown error:$_" }
    }
}


ERROR.pmを使えばfinallyとかも使えますが。
これが普通にできてしまうのがPerlの凄さでもあり、キモさでもあるんでしょうね。