Perlでは、.pm(Perlモジュール)ファイルと.pl(Perlスクリプト)ファイルの違いは何ですか?


88

.pm(Perlモジュール.pl)ファイルと(Perlスクリプト)ファイルの違いは何ですか?

1ファイルから戻る理由も教えてください。2などを返す場合、エラーは発生しません。なぜ1Perlモジュールから戻るのでしょうか。


11
1関係ない。それは可能性があります2、それは可能性があります"foo"、それは可能性があります["a", "list"]。重要なのは0、それuseが偽であると評価されたり、失敗したりするものではないということです。
アマダン2010

.plは実際にはperlライブラリです-Cプログラムや他の言語で書かれたプログラムのようなperlスクリプトには、Windowsなどの機能を必要とするオペレーティングシステムを除いて、終わりがありません。
モニカを覚えておいてください2015年

回答:


78

基本的に、使用するファイル拡張子は、perlこれらのファイルの解釈方法に違いはありません。

ただし、.pmパッケージ名に続く特定のディレクトリ構造に従ってモジュールをファイルに配置すると便利です。したがって、モジュールがExample::Plot::FourDあり、それをのExample/Plot/FourD.pmパスのディレクトリに配置した場合、のようにパッケージ名を指定すると、とは正しいことを行います。@INCuserequireuse Example::Plot::FourD

ファイルは、初期化コードが正常に実行されたことを示す最後のステートメントとしてtrueを返す必要があるため、そうで1; ない場合はtrueを返すことが確実でない限り、このようなファイルをで終了するのが通例です。ただし1;、ステートメントを追加する場合に備えて、を配置することをお勧めします。

場合はEXPR裸の単語で、require「.PM」拡張子と置き換えを想定している『::』 『/』でファイル名であなたのために、標準モジュールをロードするために簡単にそれを作るために。この形式のモジュールのロードは、名前空間を変更するリスクはありません。

すべてuseませんが提供するパッケージ名からファイル名を、把握することでrequire、それをBEGINブロックし、呼び出しimportパッケージに。使用しないことを妨げるものは何もありませんuseが、それらの手順を手動で実行します。

たとえば、以下では、Example::Plot::FourDパッケージをというファイルに入れ、ファイルt.pl内のスクリプトにロードしましたs.pl

C:\Temp> cat t.pl
package Example::Plot::FourD;

use strict; use warnings;

sub new { bless {} => shift }

sub something { print "something\n" }

"Example::Plot::FourD"

C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;

BEGIN {
    require 't.pl';
}

my $p = Example::Plot::FourD->new;
$p->something;


C:\Temp> s
something

この例は、モジュールファイルがで終わる必要がないことを示しています1。真の値であれば何でもかまいません。


-2

.plは単一のスクリプトです。

.pm(Perlモジュール)には、他のPerlスクリプトから使用できる関数があります。

Perlモジュールは、Perlプログラムまたは他のPerlモジュールで使用できる自己完結型のPerlコードです。概念的には、CリンクライブラリまたはC ++クラスに似ています。


5
「.plは単一のスクリプトです。」違います。拡張子が.plのPerlプログラムを識別する必要があるのは、壊れたオペレーティングシステムだけです。そしてもともと.plは「Perlライブラリ」を示していました-「require」または「do」コマンドでロードした外部サブルーチン。
デイブクロス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.