.pm
(Perlモジュール)と.pl
(Perlスクリプト)ファイルの違いは何ですか?
ファイルから1
を返す理由も教えてください。 2または何かを返す場合、エラーは生成されません。なぜPerlモジュールから1
を返すのですか?
基本的に、使用するファイル拡張子は、Perl
がそれらのファイルをどのように解釈するかに関して違いはありません。
ただし、パッケージ名に続く特定のディレクトリ構造に従って.pm
ファイルにモジュールを配置すると便利です。したがって、モジュールExample::Plot::FourD
があり、それを Example/Plot/FourD.pm
のパスのディレクトリ@INC
に配置すると、 use
および require
は、use Example::Plot::FourD
のようにパッケージ名を指定すると正しいことを行います。
ファイルは、初期化コードが正常に実行されたことを示す最後のステートメントとしてtrueを返す必要があるため、そうでない場合はtrueを返すことが確実でない限り、
1;
でそのようなファイルを終了するのが慣例です。ただし、ステートメントを追加する場合に備えて、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
で終わる必要はなく、真の値で終わることを示しています。