【问题标题】:Is it possible to manually include a CPAN library in a Perl script?是否可以在 Perl 脚本中手动包含 CPAN 库?
【发布时间】:2011-05-11 23:20:48
【问题描述】:

我现在的情况是我编写了一个使用 CPAN 库 XML::Simple 的 perl 脚本,并在能够安装必要的 CPAN 库的环境中进行了测试。

但是,必须在其中运行脚本的环境没有安装 CPAN 库的权限。我想知道是否有一些手动方法可以将 Simple.pm 文件包含在我的脚本中并将其包含在脚本的目录中?我试过使用'use'和'require'无济于事。

非常感谢任何帮助。

编辑:我能够通过手动下载 Simple.pm 文件并使用行 require "Simple.pm" 来解决问题;在我的代码中。我想当我最初尝试这个时,我一定以某种方式下载了不正确的文件。谢谢。

【问题讨论】:

  • 所有环境都有“安装 CPAN 库的权限”:参见 App::cpanminus、local::lib 等。只需将 PERL5_LIB 设置到正确的位置即可。
  • 这是一个非常严格的大学网络/服务器。我没有安装它们的权限。

标签: xml perl scripting cpan


【解决方案1】:

能否在另一台机器上手动下载 CPAN 模块并将其安装到目标环境中? http://www.thegeekstuff.com/2008/09/how-to-install-perl-modules-manually-and-using-cpan-command/

【讨论】:

  • 不幸的是,这台机器没有权限这样做。
  • 如果它有权限运行你的程序,它就有安装模块的权限。
【解决方案2】:

我能够通过手动下载 Simple.pm 文件并使用行 require "Simple.pm" 来解决问题;在我的代码中。我想当我最初尝试这个时,我一定以某种方式下载了不正确的文件。

【讨论】:

    【解决方案3】:

    由于XML::Simple 是一个纯Perl 模块,您可以下载该包,解压并使用它。您必须使用lib pragma 来指定包含模块的目录。

    假设您的目录结构是(仅包含相关文件):

    my_app.pl
    XML-Simple
    XML-Simple/lib
    XML-Simple/lib/XML
    XML-Simple/lib/XML/Simple.pm
    

    您的my_app.pl 将可以通过包含以下代码访问XML::Simple

    use lib 'XML-Simple/lib';
    use XML::Simple;
    

    【讨论】:

    【解决方案4】:

    你当然可以在你的模块中包含 XML::Simple 本身,但是 XML::Simple 本身依赖于其他模块。它需要 XML::Parser(取决于周围的 libexpat)或 XML::SAX。 XML::SAX 包括 XML::SAX::PurePerl,这是一个缓慢的(很久以前我上次检查时不完整)纯 perl 解析器。或者,XML::SAX 可以使用 XML::LibXML(取决于 libxml2)或 XML::SAX::Expat

    底线:如果您希望您的应用程序是自包含的,您至少需要包含 XML::Simple 和 XML::SAX,并且经过一定量的数据要处理,您可能还需要一个 C 解析图书馆。

    【讨论】:

      【解决方案5】:

      我会这样做:

      use FindBin;
      
      BEGIN {
        unshift @INC $FindBin::Bin
      }
      

      然后

      use XML::Simple;
      

      应该可以正常工作,它使您能够使用脚本发布包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多