桜ヶ丘日記

技術メモとかとか

$@($EVAL_ERROR)っていつリセットされるの?

あらまし

eval{
        ほげほげ
};
if($@){
        ふがふが
}

みたいなエラートラップ書きまくってて、
「え、ちょっと待てよ、evalするたび$@($EVAL_ERROR)って本当にリセットされるの?」
とふと自信なくなっちゃって。

実験

test.pl
#!/usr/bin/perl

use strict;

eval{
        print qq(try1\n);
        die('throw 1');
};
if($@){
        print qq(catch1: $@);
}

eval{
        print qq(try2\n);
        my $dummy = 1;
};
if($@){
        print qq(catch2: $@);
}

exit;
実行
$ perl test.pl
try1
catch1: throw 1 at test.pl line 7.
try2

結論

evalするたびともだちふえるね$@はリセットされる