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

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

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

就核心而言,您使用的文件扩展名与perl如何解释这些文件没有任何区别。

但是,将模块放在.pm文件中,遵循软件包名称后面的某个目录结构提供了一个方便。 所以,如果你有一个模块Example::Plot::FourD并且把它放在你的@INCpath中的Example/Plot/FourD.pm目录下,那么在给出包名的时候userequire会做正确的事情如use Example::Plot::FourD

该文件必须返回true作为最后一个语句来指示任何初始化代码的成功执行,所以通常以1结束这样的文件1; 除非你确定否则会返回true。 但是最好把1; ,以防你添加更多的语句。

如果EXPR是一个空白字符,那么require将采用“.pm”扩展名,并用文件名中的“/”replace为“/”,以便加载标准模块。 这种加载模块的风险不会改变你的名字空间。

所有use是从提供的包名称中找出文件名,在BEGIN块中require它并调用包中的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结尾,任何真正的值都可以。

.pl是一个单一的脚本。

在.pm( Perl模块 )中,您可以使用其他Perl脚本使用的函数:

Perl模块是一个Perl代码,可以被Perl程序或其他Perl模块使用。 它在概念上类似于C链接库或C ++类。