【问题标题】:How do I use a CPAN module in a perl script that I want to give to others?如何在我想提供给其他人的 perl 脚本中使用 CPAN 模块?
【发布时间】:2016-06-01 06:27:09
【问题描述】:

我正在编写一个获取数据并将其写入 Excel 文件的 Perl 脚本。我正在使用Excel::Writer::XLSX 来执行此操作。

我希望编写脚本,然后将其提供给我的团队的其他成员,以便我们在需要时都可以使用它来编译数据。

我对此有几个问题:

  1. 我的同事是否需要安装模块才能使脚本正常工作?

  2. 如果没有,我如何用脚本封装模块以​​将其提供给他们?

  3. 有没有比使用我选择的模块更好的方法?

【问题讨论】:

标签: excel perl module cpan


【解决方案1】:

很久以前,我编写了一个名为 scriptdist 的程序,用于将单文件程序转换为类似 CPAN 的发行版,并附带一个构建文件。这样,您可以将其作为存档传递,人们可以像对待任何其他 CPAN 发行版一样对待它。它基本上自动化了what Sinan posted。我为Dr. Dobbs写了这篇文章。

如果您想绕过存档,可以使用一个技巧。 cpan 工具可以从当前目录安装。这将获得依赖项(从本质上讲,依赖项是必需的):

 $ cpan .

这样,您可以安装程序及其依赖项,而无需将任何内容放入类似 CPAN 的存储库中。

【讨论】:

  • 我认为您或思南都没有解决 OP 的具体问题
  • 我不同意。我认为您的回答并没有改善我和思南所说的内容,而且您带来的问题超出了为他的同事提供计划所需的数量。
  • 你可能是对的,也许我误解了原来的问题。但在这种情况下,特别是当您忽略 OP 的三个逐项问题时,我认为准确描述您正在回答的问题会很有帮助
【解决方案2】:

目前还不清楚你需要知道什么

我的同事是否需要安装模块才能使脚本正常工作?

我认为很明显,您的同事需要访问您的代码才能使用它

不清楚你写了什么,但如果你创建了一个模块,那么任何可以访问你的模块文件的程序都可以简单地use它来访问它的功能

如果没有,我如何用脚本将模块包装起来交给他们?

你的“如果不是”不清楚。你写的意思是“如果他们不需要安装模块来让脚本工作”,我怀疑这是否是你的意图

“我如何用脚本封装模块” 你是在问如何创建一个模块,还是你已经有了一个?通常,模块由编写带有use 语句的脚本的程序员访问

如果您有一个模块并且您希望其他人能够使用use 加载它,那么它必须出现在他们的@INC 数组中列出的目录之一中。如果您在不同的系统上工作,那么最好创建一个包,您可以根据需要进行更改并让其他人更新

有没有比使用我选择的模块更好的方法?

你指的是Excel::Writer::XLSX还是你自己的模块?

如果Excel::Writer::XLSX 正在做你需要的事情,那么你可能不会改变。但是,如果您在某些方面遇到问题,那么您需要提出一个新问题并描述这些问题

【讨论】:

    【解决方案3】:

    有几种方法可以做到这一点。一种选择是将指定依赖关系的Makefile.PL 放在一起。这使您可以将脚本捆绑为发行版。例如

    use ExtUtils::MakeMaker;
    
    WriteMakefile(
        ABSTRACT          => 'myscript creates Excel files',
        AUTHOR            => 'A.U. Thor',
        EXE_FILES         => [ 'myscript' ],
        NAME              => 'myscript',
        VERSION           => '1.2.3',
    
        PREREQ_PM => {
            'Excel::Writer::XLSX' => '0.88',
        },
    );
    

    然后,人们可以通过perl Makefile.PL 通知他们依赖关系。如果您执行make dist 并分发生成的存档文件,他们还可以使用cpanm 安装您的脚本及其依赖项。

    另一种选择是将cpanfile 放在一起。然后,收件人可以使用cpanm 等工具安装所有依赖项。

    现在,如果您将脚本分发给不正常使用 Perl 的人,并且希望他们能够单击并运行等,您可能需要查看 pp

    【讨论】:

    • 我认为您或 Brian 都没有解决 OP 的具体问题
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多