私はPerlパイプラインを書いています。これは、さまざまな他のプログラムを呼び出し、一方から他方へデータを渡すスクリプトです。スクリプト(pipeline.pl
と呼ぶ)とそれが管理するさまざまなサブスクリプトは、subroutines.ph
で定義され、require subroutines.ph
ディレクティブで定義された共通サブルーチンのリストを共有します。Perlサブルーチンは、それを呼び出した行をどのように報告できますか?
これらの一つは、ジョブのエラーメッセージを(実際のサブルーチンはまた、いくつかの他の仕事をし、彼らはここでは関係ありませんね。いや、私はdie()
を再発明わけではない)、印刷終了している機能である:
## subroutines.ph
sub errorDie
{
my ($errMsg) = @_;
## various other cleanup tasks here
die($errMsg);
}
1;
そして、pipeline.pl
中:結果の上にスクリプトを実行
#!/usr/bin/perl
require 'subroutines.ph';
errorDie("foo")
中:
foo at subroutines.ph line 5.
それは代わりのようなものを報告することが可能です:だから
foo at pipelines.pl line 4.
を、代わりにdie()
がオンに見つかった行を報告する、それがerrorDie
サブルーチンが呼び出された元のスクリプトの行を報告しなければなりません。私は$errMsg
変数にその行を含めることでこれを行うことができることを知っていますが、それは壊れやすく厄介です。これは自動的にできますか?外部ファイルで定義されたサブルーチンは、呼び出し元を検出できますか? caller
あり
あなたがカープを知りました。私はあなたが使う必要があると思う。このリンクを参照してください。 - http://perldoc.perl.org/Carp.html – Mohit
@Mohit oh wow。はい、私は「鯉」について知っていましたが、それは自動的にこれを行ったのか分かりませんでした。ありがとう! – terdon
@terdon:これはかなり*すべて*です! – Borodin