53

Bash スクリプトで多くの Perl スクリプトを呼び出しています (場合によっては csh からも)。

Bash スクリプトの開始時に、すべての Perl スクリプトにコンパイル エラーがないかどうかをチェックするテストを配置したいと考えています。

これを行う 1 つの方法は、実際に Bash スクリプトから Perl スクリプトを呼び出してgrep、パイプされたログ ファイルの「コンパイル エラー」を検出することですが、コード内のさまざまなポイントでさまざまな Perl スクリプトが呼び出されるため、これは面倒です。これは、Bash スクリプトの最初で行います。

Perl スクリプトにコンパイル エラーがないかどうかを確認する方法はありますか?

4

4 に答える 4

75

注意してください!!

以下のコマンドを使用して Perl プログラムのコンパイル エラーをチェックするのは危険です。

$ perl -c yourperlprogram

Randal は、このトピックに関する非常に優れた記事を書いています。ぜひチェックしてください。

彼の記事からの引用:

おそらく、私たちが言える最も簡単なことは、「それは有効ですか?」ということです。このために、コンパイルのみのスイッチを渡して、perl 自体を呼び出します。

perl -c ourprogram

この操作では、perl はプログラムをコンパイルしますが、実行フェーズの直前で停止します。これは、プログラム テキストのすべての部分が、作業中のプログラムを表す内部データ構造に変換されることを意味しますが、実際にはコードを実行していません。構文エラーがある場合は通知され、コンパイルは中止されます。

実際、それは少し嘘です。BEGIN ブロック (階層化された従兄弟である use ディレクティブを含む) のおかげで、この理論的に安全な「構文チェック」中に一部の Perl コードが実行された可能性があります。たとえば、コードに次のものが含まれているとします。

BEGIN { warn "Hello, world!\n" } 

その後、perl -c! の実行中であっても、そのメッセージが表示されます。これは、「コンパイルのみ」を「コードを実行しない」と考えている人にとっては驚くべきことです。以下を含むコードを検討してください。

BEGIN { system "rm", "-rf", "/" } 

そして、その議論に問題があることがわかります。おっとっと。

于 2012-10-16T06:06:08.457 に答える