5

我对 Perl 编程很陌生。我刚读完 Llama 的书。到目前为止,我一直在 Bash 中编写脚本,但我想尝试 Perl,它比 Bash 脚本更有优势。

我正在创建一个使用许多标准模块(例如 Getopt)和一些不那么标准的模块(例如PerlMagick)的脚本

在某个时候,我想分发我的 Perl 代码,并且我希望它可以被那些不了解 Perl 或编程的人使用。显然,标准模块应该始终存在(我在一定程度上使用“使用 5.010”来保证这一点),但非标准模块呢?

我想有两种可能性:1)我应该告诉最终用户安装缺少的模块吗?2)我应该创建一个安装脚本来测试模块,如果它们不存在,那么安装它们?如果选择了选项 2,我应该下载模块并安装它们吗?或者将它们与我的主要代码一起分发?我只是不确定这种事情的礼仪是什么......

非常感谢你的所有建议,本

4

3 回答 3

5

如果您将应用程序设计为 Perl 发行版(在 CPAN 上使用),那么您将获得 Perl 工具链的强大功能来为您处理此类事情。Makefile.PL您只需确保您所依赖的模块正确地列在您的cpan YourApp::Name. 或者,如果他们从 CPAN 以外的其他地方下载了您的应用程序并且他们正在手动构建它,则该make过程可以找到他们的依赖关系(这就是为什么Module::AutoInstall没有完全死掉并且不应该成为 IMO)。

对于 Windows 用户,在这一步之前您唯一需要添加的cpan YourApp::Name是“安装 Strawberry Perl”。

您还可以选择捆绑(无论是涉及 PAR 还是只是一个安装程序或包含您的应用程序和所有必要模块的存档,可能perl还有它本身),但该技术有一个主要缺点:这意味着您要么不能使用任何XS 代码,否则您必须为您希望应用程序支持的每个不同平台提供单独的包。CPAN 路由不会遇到这个问题。

于 2010-07-13T00:28:11.137 回答
3

您可以将它们转换为可执行文件。您可以尝试诸如perlccperl2exePARPerl 开发工具包之类的东西。

于 2010-07-13T00:04:57.510 回答
1

如果你不想用prelccperlapp编译它们——那么任何可能性都有效。

  • 您应该检查存在正确版本的模块,因为您的 Perl 代码不会声明一些错误消息,例如:“Can't locate Data/UUID.pm in @INC (@INC contains: ...)”。例如:

    eval { use Data::UUID; };
    if( $@ ) { 
            print "Data::UUID not found\n"; 
    }
    

    或者

    eval { use Text::ParseWords 3.23; }; 
    if( $@ ) { 
            print "Text::ParseWords 3.23 not found\n"; 
    }
    
  • 您可以尝试使用 CPAN 模块(或 unix 上的 cpan 程序)。比如,你可以试试 shell 命令:

    cpan Data::UUID
    

    或从 perl 脚本:

    #!/usr/bin/perl
    use CPAN;
    CPAN::install("Data::UUID");
    
于 2010-07-13T00:17:06.013 回答