如何使用我的脚本分发perl模块?

时间:2012-05-07 23:34:13

标签: perl module distribution distribute

这是个好主意吗?我写了一个脚本,它使用了一些不受欢迎的模块。安装它们需要很长时间,所以我认为用我的应用程序分发它们会更好。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

通常在您的发行版的inc目录中发送依赖项。我之前在how do I link PerlIO Perl package without "installing it"automatically install missing modules from CPAN讨论了这个问题。

问题很模糊,所以不是代码,只是建议:我假设您根本不需要安装。将解压缩的依赖项放入inc目录中。使用use lib 'inc';在运行时访问它。

就是这样。

答案 1 :(得分:3)

不确定。在Apache许可下,您可以重新分发模块。

这些面向对象的模块是否不导入任何功能?然后,您不必做任何事情。只需从主程序中删除use My::Module;,然后将My::Module添加到主程序的末尾即可。

如果您没有使用面向对象的代码,并且它通过@EXPORT数组导出函数,那么您将需要采取一些额外的措施:

在这里,我必须添加Local::Foo->import qw(foo)才能将foo函数导入主程序,即使它是通过@EXPORT导出而不是@EXPORT_OK 。我还必须在我的模块中使用围绕我的导出声明的BEGIN。否则,我的主程序将无法导入任何内容:

原创节目:

主程序:

#! /usr/bin/env perl
# test.pl

use warnings;
use strict;
use Local::Foo;

use feature qw(say);

my $bar = foo("bar");

say "Bar is '$bar'";

模块本地:: Foo

#! /usr/bin/env perl
# Local/Foo.pm
#
package Local::Foo;

use Exporter qw(import);
our @EXPORT = qw(foo);

sub foo {
    my $value = shift;
    return "FOOOOOO $value";
}
1;

合并计划

#! /usr/bin/env perl
# test.pl

use warnings;
use strict;
# use Local::Foo;

# Force importation of `foo`

Local::Foo->import qw(foo);

use feature qw(say);

my $bar = foo("bar");

say "Bar is '$bar'";

#-----------------------------------------------------------------------
#! /usr/bin/env perl
# Local/Foo.pm
#
package Local::Foo;

# Add BEGIN clause to module

BEGIN {
    use Exporter qw(import);
    our @EXPORT = qw(foo);
}

sub foo {
    my $value = shift;
    return "FOOOOOO $value";
}
1;