当前位置:首页 » Perl » 编写Perl模块

编写Perl模块

编写Perl模块,Perl包,例子在线教程,参考手册和代码 -

什么是包?

  • 包是一个在自己的命名空间的代码集合

  • 命名空间是唯一的变量名称(也称为符号表)的命名集合。

  • 命名空间避免包之间的变量名冲突。

  • 包使建造的模块在使用时,不会破坏自己的命名空间模块之外的变量和函数

包语句

  • 包语句在当前的命名上下文切换到指定的命名空间(符号表)

  • 如果指定的包不存在,首先创建一个新的命名空间。

$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 { ... }
END { ... }
  • 每一个BEGIN块的perl脚本加载和编译后执行,但在此之前的任何其他语句执行

  • 每个END块执行之前的Perl解释器退出。

  • BEGIN和END块创建Perl模块时特别有用。

什么是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 函数

加载一个模块可以通过调用require函数

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

注意上面的子程序的名称必须完全合格的(因为他们被隔离在自己的包)

这将很好,使功能栏和BLAT被导入到我们自己的命名空间,所以我们不用使用的Foo::限定符。

 Use 函数

加载一个模块可以通过调用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模块装运,接着是以标准的方法创建一个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模块。

perl Makefile.PL
make
make install

Perl解释器的目录列表中,搜索模块(全局数组@INC)