.pm
(Perl模块)和.pl
(Perl脚本)文件之间有什么区别?
还请告诉我为什么我们从文件中返回1
。如果返回2或其他任何内容,它不会产生任何错误,那么我们为什么要从Perl模块返回1
?
答案 0 :(得分:72)
在核心,您使用的文件扩展名对于perl
如何解释这些文件没有任何区别。
但是,将.pm
文件中的模块放在包名后面的某个目录结构中可以提供方便。因此,如果您有一个模块Example::Plot::FourD
,并将其放在@INC
的路径中的Example/Plot/FourD.pm
目录中,那么use
和require
将执行在use 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
结尾,任何真值都可以。
答案 1 :(得分:-2)
.pl是一个单一的脚本。
在.pm(Perl Module)中,您可以使用其他Perl脚本中的函数:
Perl模块是一个独立的Perl代码片段,可供Perl程序或其他Perl模块使用。它在概念上类似于C链接库或C ++类。