web-dev-qa-db-ja.com

なぜ各Perlパッケージの最後に1があるのですか?

パッケージの最後にある1を忘れた場合、Perlは「パッケージが真の値を返さなかった」と通知します。さて、あなたがそれを忘れたことを知っているなら、なぜあなたのためにそれをそこに置いてみませんか?

35
miniml

Perlモジュールは、requireディレクティブが成功する必要がある場合(true値が返される)または失敗する場合(false値が返される場合、モジュールが何らかの理由で初期化に失敗した場合に意味があります)を通知する値を返す必要があるためです。

何も返さない場合、インタプリタはrequireが成功する必要があるか失敗する必要があるかを知ることができません。同時に、パッケージの最後に真の値を入れるのを忘れがちなので、このエラーの「一般的な修正」を提案します。つまり、戻り値として真の値を追加します。

モジュールの戻り値に関するその他の情報/民間伝承については、 この質問 を参照してください。

39
Matteo Italia

パッケージが初期化に失敗した場合、たとえば、必要なデータファイルまたは外部ライブラリが見つからなかった場合、パッケージはfalse値を返す可能性があります。このようにして、予期せぬ後でではなく、ロード時にきれいに失敗します(そしてこの失敗をテストすることもできます)。

5
Anomie

から ウィキペディアPerlモジュール

   A Perl module must end with a true value or else it is considered not to
   have loaded.  By convention this value is usually 1 though it can be
   any true value.  A module can end with false to indicate failure but
   this is rarely used and it would instead die() (exit with an error).
4
Nikhil Jain

1;

モジュールが(使用によって)ロードされると、ロード時に実行された最後のステートメントがtrueでない限り、コンパイラは文句を言います。この行は、これが当てはまることを保証します(この行の後にコードを配置しない限り)。これは、ファイルの最後まで正常に解析されたことを確認するPerlの方法です。

http://mathforum.org/~ken/Perl_modules.html を参照してください。

Trueと評価される任意のステートメントを使用できます。 1はたまたまPerlのイディオムになりました。

3
Jeff Ferland