• ベストアンサー

Perlのexitについて

こんにちは、現在シェルスクリプトからperlを呼び出し、 その実行結果を受け取るというシンプルな所で悩んでいます。 Perlからプログラムの終了時にexitで 値を返しているのですが、どの値を返しても0が返ってきます。 受け取り側はシェルスクリプトです。 exitには何か特殊な要素があるのでしょうか? ご存知の方がいたらご教授下さい。 よろしくお願いします。 # #perlのソース #(i=0の場合・i=1の場合) # if(i == 1) { exit 1; } exit 0;

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

No1です。 if(i == 1) { exit 1; } は、if($i == 1)の間違いでしょう。 $i = 1;とすると$iに1がセットされますが、 i = 1;でiに1をセットしたことにはなりません。(セット出来ません) 従って、exit 0;が実行されます。 但し、念のため、exit 1;の行のみを生かし、ほかは全てコメントにして実行してみたらどうでしょうか。それで0が表示されるようでしたら、シェル側の問題だと思います。

saratoga-goo
質問者

お礼

回答ありがとうございます。 原因が判明しました。 exitのみのコードに変えてもダメだったので、 原因が何かかなり悩んでいたのですが、 別のpmファイルのEND処理が exitした後で通ってることが判明しました。 pmファイルのEND処理でshコマンドが実行されていた為、 今回のような問題が起きました。 対応として、shコマンドをperlロジックに 書き直しました。 perl-sh間だけの関係にとらわれていましたが、 pmファイルが関係してるのは気付きませんでした。 perlは触り始めたばかりなので、 全体像が見えていませんでした。 ご教授ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

perlの戻り値の問題と言うよりは、シェルスクリプトの問題かと思われます。シェルスクリプトが正しい戻り値を表示していない可能性があります。 シェルの種類、実際に呼び出しているシェルのスクリプトの内容をここで提示されてみては如何ですか。

saratoga-goo
質問者

お礼

回答ありがとうございます。 原因が判明しました。 exitのみのコードに変えてもダメだったので、 原因が何かかなり悩んでいたのですが、 別のpmファイルのEND処理が exitした後で通ってることが判明しました。 pmファイルのEND処理でshコマンドが実行されていた為、 今回のような問題が起きました。 対応として、shコマンドをperlロジックに 書き直しました。 perl-sh間だけの関係にとらわれていましたが、 pmファイルが関係してるのは気付きませんでした。 perlは触り始めたばかりなので、 全体像が見えていませんでした。 ご教授ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A