2011-03-13 11 views

答えて

34

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

何も返さない場合は、requireが成功するか失敗するかを通訳者は知ることができません。同時に、パッケージの最後に真の値を入れることを忘れやすいので、このエラーの「共通の修正」を提案します。真の値を戻り値として追加します。

モジュールの戻り値の他の情報/フォークロアについては、this questionをご覧ください。

+0

もしあなたがそこに置くのを忘れてしまったら、初期化に失敗したことを知らせる必要はないでしょうか?それは非常に特殊なケースであるように思われるので、成功しないチャンスがあると言っていない限り、成功すると安全に仮定できませんか? –

+3

@Chris:私たちは何がより良いかより論理的であるかについて議論することができますが、言語はこのように設計されています。 ':)'(個人的には、戻り値が要求されればそれを指定する必要があります) –

+1

@Matteo - Perl 6はまだ "不確定な未来"の段階にあります私は言語の話をすることができると思います。 –

4

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

+0

パッケージは初期化に失敗した場合でもfalse値を返すことができますが、失敗することはできません。それは有用なメッセージで死ぬ方が良いでしょう。 – ikegami

2

1;

When a module is loaded (via use) the compiler will complain unless the last statement executed when it is loaded is true. This line ensures that this is the case (as long as you don't place any code after this line). It's Perl's way of making sure that it successfully parsed all the way to the end of the file.

はあなたがtrueと評価任意のステートメントを使用することができますhttp://mathforum.org/~ken/perl_modules.html

を参照してください。 1ちょうど起こったperlのイディオムになる。 wikipedia Perl moduleから

3

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). 
関連する問題