Perl编程和分发

Perl编程和分发,perl,perl-module,Perl,Perl Module,我对Perl编程非常陌生。我刚读完美洲驼的书。到目前为止,我已经用Bash编写了脚本,但我想尝试一下Perl,以及它比Bash脚本的好处 我正在创建一个脚本,它使用许多标准模块(例如Getopt)和一些非标准模块(例如 在某种程度上,我想分发我的Perl代码,我希望它能被那些不真正了解Perl或编程的人使用。显然,标准模块应该一直存在(我使用“use 5.010”在一定程度上保证了这一点),但非标准模块呢 我想有两种可能性: 1) 我是否应该告诉最终用户安装缺失的模块? 2) 我是否应该创建一个

我对Perl编程非常陌生。我刚读完美洲驼的书。到目前为止,我已经用Bash编写了脚本,但我想尝试一下Perl,以及它比Bash脚本的好处

我正在创建一个脚本,它使用许多标准模块(例如Getopt)和一些非标准模块(例如

在某种程度上,我想分发我的Perl代码,我希望它能被那些不真正了解Perl或编程的人使用。显然,标准模块应该一直存在(我使用“use 5.010”在一定程度上保证了这一点),但非标准模块呢

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

非常感谢您的建议,
Ben

您可以将它们转换为可执行文件。您可以尝试、或

如果您不想用prelc或perlapp编译它们,那么任何可能性都是可行的

  • 你应该检查模块是否正确 提供Perl代码的版本 不要声明某些错误消息,如: “在@INC中找不到数据/UUID.pm (@INC包含:…)”。例如:

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

  • 您可以尝试使用CPAN模块(或 unix上的cpan程序)。比如,你可以 try shell命令:

    cpan Data::UUID
    
    或者从perl脚本:

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

如果您将应用程序设计为一个Perl发行版(在CPAN上使用),那么您就可以使用Perl工具链为您处理这类事情。您只需确保您所依赖的模块在
Makefile.PL
中正确列出,然后某人只需编写
cpan-YourApp::Name
即可获得您的应用程序及其所需的一切。或者,如果他们从CPAN以外的其他地方下载了你的应用程序,并且他们正在手动构建它,那么
make
过程可以找到它们的依赖项(这就是为什么
Module::AutoInstall
并没有完全失效,也不值得使用的原因)

对于Windows用户,在执行
cpan YourApp::Name
步骤之前,唯一需要添加的是“安装草莓Perl”


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

Downvote:这不起作用,因为
use
在编译时运行。此外,正如霍布斯的回答所描述的,我们已经有了完美的依赖跟踪+安装工具链,不需要这种黑客行为。
#!/usr/bin/perl
use CPAN;
CPAN::install("Data::UUID");