93

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

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

4

2 に答える 2

81

核となる部分では、使用するファイル拡張子は、 が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.

于 2010-08-04T12:41:09.447 に答える
-2

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

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

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

于 2010-08-04T05:25:36.917 に答える