1

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

4

2 回答 2

4

通常将依赖项放在inc您的发行版目录中。我在如何链接 PerlIO Perl 包而不“安装它”自动从 CPAN 安装缺少的模块之前已经讨论过这个问题。

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

就这样。

于 2012-05-08T08:42:11.160 回答
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;
于 2012-05-08T02:22:49.000 回答