die実行時の戻り値

$ perl -e'die;'
Died at -e line 1.
$ echo $?
255


$ perl -e'open(FH,"nothing") or die;'
Died at -e line 1.
$ echo $?
2


まさかと思ったら perl5.005_03 でも再現。


色々と昔々の他人のコードを見ていると、知ってか知らずかうまい具合に 0 と 1 で後続処理を制御し、 2以上はエラー と判断させていてるものがあった。
ただし、今回のはそれを真似たらしく、 0 - 4 で後続処理を制御、 5以上がエラー としていたんだけど、何故か open をしくじって die で死んでいるのにも関わらず戻り値 2 で後続処理が動いてしまっていた。


とりあえず今回はリリース前ということもあり、後続に必要な制御情報を戻り値ではなく、ファイルに吐くことで対応できたので良しとする。


die の説明にも「戻り値は 0 か 0以外 のどちらかだ!」書かれてるし、マニュアルをしっかり読んどかんとイカンなぁ…