包是一个在自己的命名空间的代码集合
命名空间是唯一的变量名称(也称为符号表)的命名集合。
命名空间避免包之间的变量名冲突。
包使建造的模块在使用时,不会破坏自己的命名空间模块之外的变量和函数
如果指定的包不存在,首先创建一个新的命名空间。
$i = 1; print "$i\n"; # Prints "1" package foo; $i = 2; print "$i\n"; # Prints "2" package main; print "$i\n"; # Prints "1"
包将一直有效直至另一个包语句被调用时,或直到结束的端部的当前块或文件。
你可以明确地使用::包修饰词的包内的引用变量。
$PACKAGE_NAME::VARIABLE_NAME For Example: $i = 1; print "$i\n"; # Prints "1" package foo; $i = 2; print "$i\n"; # Prints "2" package main; print "$i\n"; # Prints "1" #by www.gitbook.net print "$foo::i\n"; # Prints "2"
您可以定义任意数量的代码块,名为BEGIN和END分别作为构造函数和析构函数。
BEGIN { ... } END { ... } BEGIN { ... } END { ... }
每一个BEGIN块的perl脚本加载和编译后执行,但在此之前的任何其他语句执行
每个END块执行之前的Perl解释器退出。
BEGIN和END块创建Perl模块时特别有用。
Perl模块是一个可重用的包中定义的库文件,其名称是一样的包的名称(.pm结束)。
Perl模块文件可能包含称为“Foo.pm”的语句。
#!/usr/bin/perl package Foo; sub bar { print "Hello $_[0]\n" } sub blat { print "World $_[0]\n" } 1;
有关模块的几个引人注目地点
这些函数要求和使用将加载一个模块。
两者都使用@INC搜索路径列表中找到该模块(你可以修改它!)
都调用eval函数来处理代码
1,底部导致EVAL计算为TRUE(从而不会失败)
加载一个模块可以通过调用require函数
#!/usr/bin/perl require Foo; Foo::bar( "a" ); Foo::blat( "b" );
注意上面的子程序的名称必须完全合格的(因为他们被隔离在自己的包)
这将很好,使功能栏和BLAT被导入到我们自己的命名空间,所以我们不用使用的Foo::限定符。
加载一个模块可以通过调用use函数
#!/usr/bin/perl use Foo; bar( "a" ); blat( "b" );
注意,我们并不用完全限定包的函数名?
use 函数将导出的符号列表,从一个模块添加了一些报表模块内
require Exporter; @ISA = qw(Exporter);
然后,提供的符号列表(标量,列表,哈希,子程序等),通过填写列出的变量名为@EXPORT:
package Module; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(bar blat); #by www.gitbook.net sub bar { print "Hello $_[0]\n" } sub blat { print "World $_[0]\n" } sub splat { print "Not $_[0]\n" } # Not exported! 1;
当你准备好你的Perl模块装运,接着是以标准的方法创建一个Perl模块树。 这是使用h2xs实用工具。随着PERL此实用程序。这里是语法使用h2xs
$h2xs -AX -n Module Name # For example, if your module is available in Person.pm file $h2xs -AX -n Person #by www.gitbook.net This will produce following result Writing Person/lib/Person.pm Writing Person/Makefile.PL Writing Person/README Writing Person/t/Person.t Writing Person/Changes Writing Person/MANIFEST
下面是这些选项的描述
-A 省略了自动加载磁带机代码(最好使用大量不常用的子程序模块定义)
-X 省略了XS元素(外部子程序,在外部意味着外部Perl,即C)
-n 指定模块的名称
因此,上面的命令创建的人目录下面的内部结构。上面示出的实际结果。
Changes
Makefile.PL
MANIFEST (contains the list of all files in the package)
README
t/ (test files)
lib/ ( Actual source code goes here
所以,你最后tar此目录结构到一个文件Person.tar。 适当的指示,你将不得不更新README文件。 您可以提供一些测试的例子t目录中的文件。
安装Perl模块是很容易的。按照以下顺序进行安装任何Perl模块。
perl Makefile.PL make make install
Perl解释器的目录列表中,搜索模块(全局数组@INC)