解决方法
但是,将模块放在.pm文件中遵循包名称后的某个目录结构提供了方便。所以,如果你有一个模块Example :: Plot :: FourD,你把它放在一个目录中的例子/ Plot / FourD.pm在你的@INC
的路径,然后use
和require
将做正确的事情,当给定包名称为在使用中Example :: Plot :: FourD。
The file must return true as the last statement to indicate successful execution of any initialization code,so it’s customary to end such a file with
1;
unless you’re sure it’ll return true otherwise. But it’s better just to put the1;
,in case you add more statements.If
EXPR
is a bareword,therequire
assumes a “.pm” extension and replaces “::” with “/” in the filename for you,to make it easy to load standard modules. This form of loading of modules does not risk altering your namespace.
所有的用途是从所提供的包名中找出文件名,在BEGIN块中要求它,并在包上调用import。没有什么阻止你不使用,但手动采取这些步骤。
例如,下面我将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结束,任何真正的值都会做。