2013-03-14 6 views
8

私はPerlディストリビューションのbase.pmのソースを見ていますが、 "非実際的な"モジュールとは区別されません。 use baseが「プラグマ」の場合、基本的にはuse Fooとはどのような違いがありますか?Fooはどのモジュールですか?モジュールを実用的なモジュールにするには?

答えて

7

プラグマのための固体定義はありません。公式に近いものはperlpragmaです。

  • これらは通常、パーサーの言語や動作を変更します。
  • 通常、その効果はレキシカルスコープです。

私は個人的には、これらの要件であると考えて(そしてperlpragmaがあまりにもないようです)が、コアモジュールvarssubsは、その効果はレキシカルスコープされていなくてもプラグマように文書化されています。

baselibのいずれも一致しません。彼らがしているのは、 "Perl自体"に情報を提供することです。私はプラグマとしての資格もあると思います。

私のモジュールuse syntax qw(loop);は実用的だと考えています。

+0

実際にbase.pmをカバーするのを忘れてしまった。この省略を解決しました。 – ikegami

+0

私のコメントは自分の答えになった:-) –

1

名前は多くのコンテキストでよく使われますが、通常、プラグマはヒントのハッシュ%^Hを使用するものと考えています(perldoc perlpragmaに記載されています)。つまり、主な違いは、アクションがコンパイル時に存在しなければならないということです。 useが動作し、require(BEGINには含まれていません)は動作しません。これは(この定義による)「実用的なモジュール」と他のモジュールとの間の重要な違いです。この定義では、vars,subs,baseまたはlibのいずれもがプラグマではありません。

関連する問題