【发布时间】:2012-05-07 23:34:13
【问题描述】:
这是个好主意吗?我写了一个脚本,它使用了一些不受欢迎的模块。安装它们需要很长时间,所以我认为最好将它们与我的应用程序一起分发。我该怎么做?
【问题讨论】:
标签: perl module distribution distribute
这是个好主意吗?我写了一个脚本,它使用了一些不受欢迎的模块。安装它们需要很长时间,所以我认为最好将它们与我的应用程序一起分发。我该怎么做?
【问题讨论】:
标签: perl module distribution distribute
习惯上在您的发行版的inc 目录中发布依赖项。我之前在how do I link PerlIO Perl package without "installing it" 和automatically install missing modules from CPAN 中讨论过这个问题。
这个问题很模糊,所以不是代码,而是建议:我假设您根本不需要安装。将解压后的依赖项放入inc 目录。在运行时使用use lib 'inc'; 访问它。
就是这样。
【讨论】:
当然。在 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'";
#! /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;
【讨论】: