Error.pm を使ってみる。

Test::Exceptionで、Error.pmの例外をチェックするサンプルがあったのでError.pmを使ってみる。

use Error qw(:try);

# 引数が偶数の場合は真を返す。ただし、引数が整数でない場合は例外を返す。
sub is_even {
    my $n = shift;

    try {
        if ( $n != int($n) ) {
            throw Error::Simple("argument is not an integer : $n");
        }

    }
    catch Error with {
        my $err = shift;
   
        $err->throw;
    };

    return $n % 2 == 0;
}
はまったところ
  • use Error qw(:try) と明示的に指定しないと try が使えない
  • catch 内で再度エラーを投げる場合は、$err->throw としないといけない。
そもそも
  • try catchについてちゃんと理解してなかったのがマズイ。
  • 今回の用途では、try catch する必要がない。
本来書くべきだったコード
use Error qw(:try);

# 引数が偶数の場合は真を返す。ただし、引数が整数でない場合は例外を返す。
sub is_even {
    my $n = shift;

    if ( $n != int($n) ) {
        throw Error::Simple("argument is not an integer : $n");
    }

    return $n % 2 == 0;
}

結論

勉強不足すぎる。