在Perl中,.pm(Perl模块)和.pl(Perl脚本)文件有什么区别?

时间:2010-08-04 05:20:57

标签: perl perl-module

.pm(Perl模块)和.pl(Perl脚本)文件之间有什么区别?

还请告诉我为什么我们从文件中返回1。如果返回2或其他任何内容,它不会产生任何错误,那么我们为什么要从Perl模块返回1

2 个答案:

答案 0 :(得分:72)

在核心,您使用的文件扩展名对于perl如何解释这些文件没有任何区别。

但是,将.pm文件中的模块放在包名后面的某个目录结构中可以提供方便。因此,如果您有一个模块Example::Plot::FourD,并将其放在@INC的路径中的Example/Plot/FourD.pm目录中,那么userequire将执行在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 ++类。