这是个好主意吗?我写了一个脚本,它使用了一些不受欢迎的模块。安装它们需要很多时间,所以我认为最好将它们与我的应用程序一起分发。我该怎么做?
习惯上在发行版的inc
目录中提供依赖项。我已经在如何链接PerlIO Perl包而不"安装它"并自动安装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'";
模块本地::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;