代码之家  ›  专栏  ›  技术社区  ›  dlamotte

如何在没有自定义模块开销的情况下分发本机perl脚本?

  •  7
  • dlamotte  · 技术社区  · 15 年前

    如何分发本机(非“compiled/perl2exe/…”)Perl脚本,而不强制用户了解脚本运行所需的自定义(非CPAN)模块?

    我有时决定只将模块复制到实际脚本中,但我更喜欢更干净的解决方案。

    6 回复  |  直到 15 年前
        1
  •  6
  •   Michael Carman    15 年前

    也就是说,有两种选择。一种是用知道真实脚本完整路径的包装器(例如pl2bat)替换脚本。另一个是使用 PAR

        2
  •  4
  •   innaM    15 年前

    如果您为客户机准备的脚本需要“自定义”模块,只需将模块打包,就像您试图将它们上载到cpan一样。然后将包交给客户机,客户机就可以使用cpan实用程序安装脚本和模块。

        3
  •  2
  •   Ben Dunlap    15 年前

    分发安装程序

    我没试过这个,但是 Module::Install

    独立的、可扩展的Perl模块安装程序

        4
  •  2
  •   tsee    15 年前

    作为“将所有模块放在一个地方,让您的应用程序意识到它”的一个变体,它甚至可以跨多台计算机和网络工作,也许您应该检查一下 PAR::Repository PAR::Repository::Client . 您只需提供一个二进制客户端可执行文件,它连接到存储库(通过文件系统或https),并执行用户请求的存储库提供的任意数量的程序(使用任意模块集)。

        5
  •  0
  •   daotoad    15 年前

    如果你能用一个 NeXTSTEP style application 捆因为您可能不是在为使用捆绑包的平台开发,所以您必须将就一下。

    将所有支持文件放在已知位置,并将可执行文件指向这些文件以访问设置和库。最简单的方法是使用一个简单的安装程序。

    例如,一个名为 foo ,将所有必需的文件放入 /opt/xlyd_apps/foo /opt/xlyd_apps/foo/lib ,中的配置 /opt/xlyd_apps/foo/etc 等等将可执行文件放入 /opt/xlyd_apps/foo/bin

    重要的是确保可执行文件知道如何查看 /opt/xlyd_应用程序/foo 如果客户/客户移动 脚本到新位置,安装仍然有效。

        6
  •  -3
  •   dlamotte    15 年前

    实际上我已经想出了自己的解决方案,我有点好奇它会有什么样的接收效果。

    我编写了一个脚本,它读取perl脚本并查找“use/require”语句。找到它们后,它会检查模块是否是标准库的一部分(查看/perl5/\d+.\d+[\d.]+/)的模块路径,然后根据使用情况以两种不同的方式重写use/require行。

    如果 发现:

    {
        ... inline the entire module here...
    }
    

    使用 发现:

    BEGIN {
        ... inline the entire module here...
    }
    

    使用 ,请立即按照上面的说明:

    BEGIN { import Module ...imports seen... }
    

    我明白这一点 使用使用XS的模块,但我对此没有意见。大多数情况下,我只需要支持纯perl模块。