这是个好主意吗?我写了一个脚本,它使用了一些不受欢迎的模块。安装它们需要很长时间,所以我认为用我的应用程序分发它们会更好。我怎么能这样做?
答案 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'";
#! /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;