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
2条答案
按热度按时间ltskdhd11#
从根本上说,您使用的文件扩展名对
perl
如何解释这些文件没有任何影响。但是,将模块放在
.pm
文件中,按照包名后面的特定目录结构可以提供方便。因此,如果您有一个模块Example::Plot::FourD
,并将其放在@INC
路径中的Example/Plot/FourD.pm
目录中,那么当给定use Example::Plot::FourD
中的包名时,use
和require
将做正确的事情。文件的最后一条语句必须返回true,以表示任何初始化代码的成功执行,因此习惯上以
1;
结束这样的文件,除非你确定它会返回true。但是最好只放1;
,以防你添加更多的语句。如果
EXPR
是一个bareword,require
会假设扩展名为“.pm”,并将文件名中的“::”替换为“/”,以便于加载标准模块。这种加载模块的形式不会改变您的命名空间。use
所做的就是从提供的包名中找出文件名,require
将其放入BEGIN
块中,并在包上调用import
。没有什么可以阻止您不使用use
,而是手动执行这些步骤。例如,下面我将
Example::Plot::FourD
包放在一个名为t.pl
的文件中,并将其加载到文件s.pl
的脚本中。这个例子表明模块文件不一定要以
1
结尾,任何true值都可以。kmpatx3s2#
.pl
是一个脚本。在
.pm
(Perl Module)中,您可以从其他Perl脚本中使用函数:Perl模块是一段自包含的Perl代码,可以被Perl程序或其他Perl模块使用。它在概念上类似于C链接库或C++类。