Perl编程和分发

时间:2010-07-12 23:43:15

标签: perl perl-module

我是Perl编程的新手。我刚刚读完了Llama的书。到目前为止,我已经用Bash编写了脚本,但我想尝试使用Perl,它比Bash脚本更有优势。

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

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

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

非常感谢你的建议, 本

3 个答案:

答案 0 :(得分:5)

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

对于Windows用户,在cpan YourApp::Name步骤之前必须添加的唯一内容是“安装Strawberry Perl”。

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

答案 1 :(得分:3)

您可以将它们转换为可执行文件。您可以尝试perlccperl2exePARPerl development kit等内容。

答案 2 :(得分:1)

如果您不想使用 prelcc perlapp 编译它们,那么任何可行性都可以。

  • 您应该检查模块是否正确 版本,适用于您的Perl代码 不要声明一些错误消息,如: “无法在@INC中找到Data / UUID.pm (@INC包含:......)“。例如:

    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-script:

    #!/usr/bin/perl
    use CPAN;
    CPAN::install("Data::UUID");