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



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

习惯上在发行版的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;

相关内容

  • 没有找到相关文章

最新更新