有没有办法将常见的Perl函数封装到自己的脚本中?

时间:2009-09-03 20:36:30

标签: perl scripting

我正在维护几个Perl脚本,它们都具有不同功能的类似代码块。每次更新代码块时,我都必须遍历每个脚本并手动进行更改。

有没有办法将常用函数封装到自己的脚本中并调用它们?

5 个答案:

答案 0 :(得分:12)

将常用功能放在module中。有关详细信息,请参阅perldoc perlmod

答案 1 :(得分:6)

还有其他方法,但它们都有严重的问题。模块是要走的路,它们不一定非常复杂。这是一个基本模板:

package Mod;

use strict;
use warnings;

use Exporter 'import';

#list of functions/package variables to automatically export
our @EXPORT = qw(
    always_exported   
); 

#list of functions/package variables to export on request
our @EXPORT_OK = qw(
    exported_on_request
    also_exported_on_request
);

sub always_exported { print "Hi\n" }

sub exported_on_request { print "Hello\n" }

sub also_exported_on_request { print "hello world\n" }

1; #this 1; is required, see perldoc perlmod for details

创建像/home/user/perllib这样的目录。将该代码放在该目录中名为Mod.pm的文件中。你可以使用这样的模块:

#!/usr/bin/perl

use strict;
use warnings;

#this line tells Perl where your custom modules are
use lib '/home/user/perllib';

use Mod qw/exported_on_request/;

always_exported();
exported_on_request();

当然,您可以根据需要为文件命名。将包命名为与文件相同是一种好的形式。如果您希望在包名称中包含::(例如File::Find),则需要在/home/user/perllib中创建子目录。每个::等同于/,因此My::Neat::Module将放在文件/home/user/perllib/My/Neat/Module.pm中。您可以在perldoc perlmod中了解有关模块的更多信息,并在perldoc Exporter

中详细了解Exporter

答案 2 :(得分:2)

大约三分之一的Intermediate Perl专门讨论这个话题。

答案 3 :(得分:0)

使用模块是最强大的方法,学习如何使用模块会很有帮助。

效率较低的是do功能。将代码提取到单独的文件,例如“mysub.pl”和

do 'mysub.pl';

这将读取然后评估文件的内容。

答案 4 :(得分:0)

您可以使用

require "some_lib_file.pl";

您将放置所有常用功能,并从包含上述行的其他脚本中调用它们。

例如:

146$ cat tools.pl
# this is a common function we are going to call from other scripts
sub util()
{
    my $v = shift;
    return "$v\n";
}
1; # note this 1; the 'required' script needs to end with a true value

147$ cat test.pl
#!/bin/perl5.8 -w
require 'tools.pl';
print "starting $0\n";
print util("asdfasfdas");
exit(0);

148$ cat test2.pl
#!/bin/perl5.8 -w
require "tools.pl";
print "starting $0\n";
print util(1);
exit(0);

然后执行test.pltest2.pl将产生以下结果:

149$ test.pl
starting test.pl
asdfasfdas

150$ test2.pl
starting test2.pl
1