我是Perl编程的新手。我刚刚读完了Llama的书。到目前为止,我已经用Bash编写了脚本,但我想尝试使用Perl,它比Bash脚本更有优势。
我正在创建一个使用大量标准模块(例如Getopt)的脚本和一些不那么标准的模块(例如PerlMagick)
在某些时候,我想分发我的Perl代码,我希望它可以被那些不了解Perl或编程的人使用。显然标准模块应该始终存在(我使用“使用5.010”来保证这一点),但是非标准模块是什么?
我猜有两种可能性: 1)我应该告诉最终用户安装缺少的模块吗? 2)我应该创建一个测试模块的安装脚本,如果它们不存在,那么安装它们吗? 如果选择了选项2,我应该下载模块并安装它们吗?或者用我的主要代码分发它们? 我只是不确定这些事情的礼节是什么......
非常感谢你的建议, 本
答案 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)
您可以将它们转换为可执行文件。您可以尝试perlcc,perl2exe,PAR或Perl 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");