package 语句将当前命名上下文切换到指定的名称空间。
以下是在文件中包含main和Foo软件包的示例。在这里,特殊变量__PACKAGE__已用于打印软件包名称。
#!/usr/bin/perl # This is main package $i=1; print "Package name : " , __PACKAGE__ , " $i\n"; package Foo; # This is Foo package $i=10; print "Package name : " , __PACKAGE__ , " $i\n"; package main; # This is again main package $i=100; print "Package name : " , __PACKAGE__ , " $i\n"; print "Package name : " , __PACKAGE__ , " $Foo::i\n"; 1;
执行上述代码后,将产生以下输出-
Package name : main 1 Package name : Foo 10 Package name : main 100 Package name : main 10
BEGIN和END块
您可以定义任意数量的名为BEGIN和END的代码块,它们分别充当构造函数和析构函数。
BEGIN { ... } END { ... } BEGIN { ... } END { ... }
每个BEGIN 块在加载和编译perl脚本之后但在执行任何其他语句之前执行。
每个END块都在perl解释器退出之前执行。
在创建Perl模块时,BEGIN和END块特别有用。
以下示例显示其用法-
#!/usr/bin/perl package Foo; print "Begin and Block Demo\n"; BEGIN { print "This is BEGIN Block\n" } END { print "This is END Block\n" } 1;
执行上述代码后,将产生以下输出-
This is BEGIN Block Begin and Block Demo This is END Block
Perl模块
Perl模块是在库文件中定义的可重用程序包,其名称与扩展名为.pm的程序包名称相同。
一个名为 Foo.pm 的Perl模块文件可能包含这样的语句。
#!/usr/bin/perl package Foo; sub bar { print "Hello $_[0]\n" } sub blat { print "World $_[0]\n" } 1;
关于Perl模块的几点要点
require 和 use 函数将加载模块。
都使用 @INC 中的搜索路径列表来查找模块。
两个函数 require 和 use 调用 eval 函数来处理代码。
底部的 1; 导致eval判断为TRUE(因此不会失败)。
require 函数
可以通过调用 require 函数来加载模块,如下所示:
#!/usr/bin/perl require Foo; Foo::bar( "a" ); Foo::blat( "b" );
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); 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 ModuleName
如,如果您的模块在 Person.pm文件中可用,则只需发出以下命令-
$h2xs -AX -n Person
这将产生以下输出-
Writing Person/lib/Person.pm Writing Person/Makefile.PL Writing Person/README Writing Person/t/Person.t Writing Person/Changes Writing Person/MANIFEST
这是这些选项的描述-
-A 省略了Autoloader代码(由定义大量不常用子示例程的模块最佳使用)。
-X 省略了XS元素(eXternal子示例程,其中eXternal表示Perl外部,即C)。
-n 指定模块的名称。
安装Perl模块
以tar.gz文件的形式下载Perl模块。按照以下顺序安装任何以 Person.tar.gz 文件下载的Perl模块 Person.pm
tar xvfz Person.tar.gz cd Person perl Makefile.PL make make install
参考链接
https://www.learnfk.com/perl/perl-packages-modules.html
标签:__,教程,无涯,Perl,Person,模块,print,Foo From: https://blog.51cto.com/u_14033984/6961961