【发布时间】:2016-06-01 06:27:09
【问题描述】:
我正在编写一个获取数据并将其写入 Excel 文件的 Perl 脚本。我正在使用Excel::Writer::XLSX 来执行此操作。
我希望编写脚本,然后将其提供给我的团队的其他成员,以便我们在需要时都可以使用它来编译数据。
我对此有几个问题:
我的同事是否需要安装模块才能使脚本正常工作?
如果没有,我如何用脚本封装模块以将其提供给他们?
有没有比使用我选择的模块更好的方法?
【问题讨论】:
我正在编写一个获取数据并将其写入 Excel 文件的 Perl 脚本。我正在使用Excel::Writer::XLSX 来执行此操作。
我希望编写脚本,然后将其提供给我的团队的其他成员,以便我们在需要时都可以使用它来编译数据。
我对此有几个问题:
我的同事是否需要安装模块才能使脚本正常工作?
如果没有,我如何用脚本封装模块以将其提供给他们?
有没有比使用我选择的模块更好的方法?
【问题讨论】:
很久以前,我编写了一个名为 scriptdist 的程序,用于将单文件程序转换为类似 CPAN 的发行版,并附带一个构建文件。这样,您可以将其作为存档传递,人们可以像对待任何其他 CPAN 发行版一样对待它。它基本上自动化了what Sinan posted。我为Dr. Dobbs写了这篇文章。
如果您想绕过存档,可以使用一个技巧。 cpan 工具可以从当前目录安装。这将获得依赖项(从本质上讲,依赖项是必需的):
$ cpan .
这样,您可以安装程序及其依赖项,而无需将任何内容放入类似 CPAN 的存储库中。
【讨论】:
目前还不清楚你需要知道什么
我的同事是否需要安装模块才能使脚本正常工作?
我认为很明显,您的同事需要访问您的代码才能使用它
不清楚你写了什么,但如果你创建了一个模块,那么任何可以访问你的模块文件的程序都可以简单地use它来访问它的功能
如果没有,我如何用脚本将模块包装起来交给他们?
你的“如果不是”不清楚。你写的意思是“如果他们不需要安装模块来让脚本工作”,我怀疑这是否是你的意图
“我如何用脚本封装模块” 你是在问如何创建一个模块,还是你已经有了一个?通常,模块由编写带有use 语句的脚本的程序员访问
如果您有一个模块并且您希望其他人能够使用use 加载它,那么它必须出现在他们的@INC 数组中列出的目录之一中。如果您在不同的系统上工作,那么最好创建一个包,您可以根据需要进行更改并让其他人更新
有没有比使用我选择的模块更好的方法?
你指的是Excel::Writer::XLSX还是你自己的模块?
如果Excel::Writer::XLSX 正在做你需要的事情,那么你可能不会改变。但是,如果您在某些方面遇到问题,那么您需要提出一个新问题并描述这些问题
【讨论】:
有几种方法可以做到这一点。一种选择是将指定依赖关系的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。
【讨论】: