11

名前空間またはパッケージは同じですか? パッケージしかないPerlを使用しています。モジュールを含む他のプログラミング言語があることは知っています。

違いは何ですか?

4

2 に答える 2

17

packageディレクティブは名前空間を設定します。そのため、名前空間はパッケージとも呼ばれます。

Perl にはモジュールの正式な定義がありません。さまざまな違いがありますが、以下は大部分のモジュールに当てはまります。

  • 拡張子を持つファイル.pm
  • packageこのファイルには、コード全体をカバーする単一の宣言が含まれています。(ただし、以下を参照してください。)
  • ファイルは、それによって命名された名前空間に基づいて命名されpackageます。
  • このファイルは、実行時に true 値を返すことが期待されています。
  • このファイルは、インタープリターごとに 1 回しか実行されないと予想されます。

.pm複数のパッケージを含むファイルに遭遇することは珍しくありません。それが単一のモジュールであるか、複数のモジュールであるか、またはその両方であるかは議論の余地があります。

于 2013-01-07T05:53:35.673 に答える
16

Namespace別個の一連の識別子のコンテナを意味する一般的なコンピューティング用語です。同じ識別子が異なる名前空間に独立して表示され、異なるオブジェクトを参照できます。オブジェクトを明確に識別する完全修飾識別子は、名前空間と識別子で構成されます。

packagePerl は、キーワードを使用して名前空間を実装します。

Perlモジュールはまったく別のものです。useこれは、キーワードを使用して任意のプログラムに組み込むことができる Perl コードの一部です。ファイル名は.pm- for Perl Module - で終わる必要があり、含まれるコードにはpackage、パスを含むファイルの名前と同等のパッケージ名を使用するステートメントが含まれている必要があります。たとえば、 というファイルに記述されたモジュールには、 のようなステートメントがMy/Useful/Module.pm必要です。packagepackage My::Useful::Module

あなたが考えていたのは、これも一般的なコンピューティング用語であり、今回はオブジェクト指向データのタイプを意味するクラスです。Perl はそのパッケージをクラス名として使用し、オブジェクト指向モジュールにはコンストラクターサブルーチン (通常は呼び出される)があり、オブジェクト指向の方法で動作させるために使用newされたデータへの参照を返します。blessedすべての Perl モジュールがオブジェクト指向モジュールであるとは限りません。サブルーチンの単純なライブラリである場合もあります。

于 2013-01-07T06:13:08.817 に答える