LL で異常終了処理する時のイディオム
Tomohiro wrote this on Apr 20, 2011エラーの際に,メッセージを表示して,プログラムを終了させるという流れを LL で実装する方法を調査してみた.
Ruby/Python/Perl はほぼ想定された動作をしたが,PHP のみ die
の引数に文字列を渡すと,ステータスコード “0” を返す,という謎の挙動を示した.
調べてみたところバグではなく PHP の仕様ではあったのだが,個人的にはイケてないなぁと思う.
Ruby
サンプル
#!/usr/bin/env ruby
abort 'Error'
ステータスコード
$ ruby -e "abort 'Error'"
Error
$ echo $?
1
Perl
サンプル
#!/usr/bin/env perl
use strict;
use warnings;
die 'Error';
ステータスコード
$ perl -e "die 'Error'"
Error at -e line 1.
$ echo $?
255
Python
サンプル
#!/usr/bin/env python
import sys
sys.exit('Error')
ステータスコード
$ python -c "import sys; sys.exit('Error')"
Error
$ echo $?
1
PHP
サンプル
#!/usr/bin/env php
<?php
echo 'Error' . PHP_EOL;
die(1);
ステータスコード
$ php -r "die('Error' . PHP_EOL);"
Error
$ echo $?
0
$ php -r "echo 'Error' . PHP_EOL; die(1);"
Error
$ echo $?
1