perl -e 'local $?; exit 1'
% perl -e 'local $?; exit 1'; echo $? 0 % perl -e '$? = 2; { local $?; exit 1 }'; echo $? 2 % perl -e '$? = 2'; echo $? 0 % perl -e 'END { $? = 1 }'; echo $? 1 % perl -e 'END { local $? = 1 }'; echo $? 0
perlipc をみながら、$SIG{CHLD} のところで local $? をしていたら、上記のことを初めて知った。 具体的には、子プロセスが exit code != 0 で終了したら親もexit code != 0で終了したいと思って
$SIG{CHLD} = sub { local $?; my $pid = wait; exit 255 if $? != 0; }; my $pid = fork // die; if ($pid == 0) { # child ... } # parent ...
みたいなコードを書いたら、子プロセスが exit code != 0 で終了しても、親は必ず exit code = 0になってしまった。
SEE ALSO
perldoc perlvar の $?