跳转到内容

Perl 编程/代码重用(模块)

来自维基教科书,开放世界中的开放书籍
上一个:正则表达式参考 索引 下一个:对象

Perl 模块(以pm扩展名结尾的文件)是 Perl 代码文件,可以在程序之间重复使用。有一个名为 CPAN(Comprehensive Perl Archive Network)的 Perl 模块在线存储库,地址为http://cpan.org。许多这些模块随 Perl 标准提供,但其他模块必须根据需要安装。

有数千个 Perl 模块可以做任何事情,从创建临时文件到调用亚马逊网络服务。如果您知道如何查找、安装和使用合适的 Perl 模块,这些模块可以轻松快速地编写您的应用程序。如果您想编写自己的 Perl 模块,最好的方法是先在http://Search.cpan.org搜索,以确保您不会重复造轮子。

Perl 模块有两种主要风格

  1. 函数式
  2. 面向对象

一些 Perl 模块同时使用这两种方法。

函数式 Perl 模块的使用方式如下

use Foo qw/bar/; # Import the name of the subroutine you want to use.
print bar();

要使用面向对象的 Perl 模块,您需要执行以下操作

use Foo;
my $foo = Foo->new();
print $foo->bar;  #call Foo's bar method and print the output.

如何安装 Perl 模块

[编辑 | 编辑源代码]

找到您想要的 Perl 模块http://cpan.org,并下载压缩文件。解压并解压缩文件

tar -zxvf MyModule.tgz

然后进入此目录,并按照 README 或 INSTALL 文件中的说明进行操作。

您也可以使用一个名为cpan的命令行程序,如果您已安装它

sudo cpan -imt Module::I::Want

编写自己的 Perl 模块

[编辑 | 编辑源代码]

Perl 模块与 Perl 脚本在两个关键且简单的方式上有所不同。不要用“#!/path/to/perl”开头,而是用以下内容开头

package My::Module::Name;

您需要用一个真值结束模块,因此常见的做法是在文件末尾执行此操作

1;

以下是一个有效的 Perl 模块

package My::Module::Name;

1;

我们创建一个名为ExampleModule.pm的新文件,并在其中包含以下代码

package ExampleModule;
use strict;
use base "Exporter";
our @EXPORT = qw/hello_world/;

sub hello_world {
  print "Hello, World!\n";
}

1;

我们可以通过运行

perl -c ExampleModule.pm

来测试语法是否有效如果一切正常,它将打印出“ExampleModule.pm 语法正确

”。否则,您可以使用打印出的消息进行调试。

#!/usr/bin/perl

use ExampleModule;

hello_world();

exit;

现在,我们可以在脚本中使用它来查看它是否有效

瞧!您已经创建了一个 Perl 模块。

创建 CPAN 风格的 Perl 模块

[编辑 | 编辑源代码]

CPAN 风格的模块具有测试套件,以及将模块构建到 Perl 库中的方法。下载并安装Module::Starter

module-starter --module=My::Module::Name, My::Other::Module::Name, --author="My Name" --email="[email protected]"

从 CPAN。安装完成后,您的路径中将有一个名为 module-starter 的程序。要在命令行创建新模块,请执行以下操作然后,它将为您创建一组目录,包括一些带有起始 POD 文档的 shell 模块文件。Perl 模块将位于创建的目录内的 lib 目录中。这些是需要编辑的文件。您可以将模块的测试放到“t

>perl Makefile.PL
>make
>make test
>sudo make install

”目录中。要安装和构建模块,请执行以下操作

如何将参数传递给 Perl 模块中的函数

[编辑 | 编辑源代码]

package functions;

sub count() {
  my ($command_type, $rc) = @_;

  []

从 Perl 模块调用函数时,使用模块名称、函数名称以及开头和结尾的括号。如果要传递一些参数,则按顺序在括号内完成。模块中的代码以以下方式获取参数在第一行之后,函数count可以使用传递的参数$command_type$rc。主程序调用count()

use 
sub count() {
  use functions;

  my $rc;

  $rc = [];

  []
  &functions:count("INSERT", $rc);
  []
上一个:正则表达式参考 索引 下一个:对象
过程如下
华夏公益教科书