perl -e 'sleep 1; die' の exit stauts
perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $?
の結果が
% perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? darwin, 5.018001 60 % /usr/bin/perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? darwin, 5.016002 60 % perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? linux, 5.018001 255 % /usr/bin/perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? linux, 5.010001 2
と様々。なぜこうなるのか。 die の exit status はいつも 255 になるものと思っていた。
P.S.
perldoc によると die の exit statusは
exit $! if $!; # errno exit $? >> 8 if $? >> 8; # child exit status exit 255; # last resort
で決まるらしい(今知ったw)。$!, $? も出力させてみると
% perl -e 'print "$^O, $]\n"; sleep 1; print "\$!=$!, \$?=$?\n"; die' 2>/dev/null; echo $? darwin, 5.018001 $!=Operation timed out, $?=0 60 % /usr/bin/perl -e 'print "$^O, $]\n"; sleep 1; print "\$!=$!, \$?=$?\n"; die' 2>/dev/null; echo $? darwin, 5.016002 $!=Operation timed out, $?=0 60 % perl -e 'print "$^O, $]\n"; sleep 1; print "\$!=$!, \$?=$?\n"; die' 2>/dev/null; echo $? linux, 5.018001 $!=, $?=0 255 % /usr/bin/perl -e 'print "$^O, $]\n"; sleep 1; print "\$!=$!, \$?=$?\n"; die' 2>/dev/null; echo $? linux, 5.010001 $!=No such file or directory, $?=0 2
要するに、自分の環境は
- mac の perl で sleep を使うと $!=60 (Operation timed out) がセットされる
- CentOS 6.4 の /usr/bin/perl は、はじめから $!=2 (No such file or directory) がセットされてる
となっている。これが予期された挙動とは思えない。