【问题标题】:Packaging Perl modules with Config files?用配置文件打包 Perl 模块?
【发布时间】:2009-07-09 06:17:18
【问题描述】:

我目前正在创建一个供内部使用的 Perl 模块。我使用 ExtUtils::ModuleMaker 为我的 Perl 模块生成构建脚本和框架。我想包含我的核心模块需要正常运行的 .ini 配置文件。我应该把这些文件放在哪里,以便它们与我的模块一起安装?我需要使用什么路径来跨主模块和子模块访问这些配置文件?

附:这是目录框架:

   |-lib
   |---Main.pm
   |---Main
   |-----subModule1.pm
   |-----subModule2.pm
   |-----subModule3.pm
   |-scripts
   |-t

【问题讨论】:

    标签: perl config


    【解决方案1】:

    如果您使用的是 Module::Install,则可以使用 Module::Install::ShareFile::ShareDir

    如果您使用的是 Module::Build,您可能需要使用它的 config_data 工具和 *::ConfigData 模块。

    【讨论】:

    • 嗯...我正在使用 Module::Install::Share; # 将 ./share/ 中的所有内容放入分发 'auto' 路径 Module::Install::Share::install_share( 'share' );但我收到错误无法通过包“share”找到对象方法“postamble”
    • @kthahore:不要限定它;只需使用“install_share 'share';”。 Module::Install 使用了太多魔法
    【解决方案2】:

    看看生成的 Makefile,我敢打赌把它放在lib/Main 下会更好,然后你可以让你的模块先看~/.modulerc,然后看PERLLIB/Main/modulerc.ini 或类似的东西。

    您还可以在模块中嵌入默认值,在没有~/.modulerc 的情况下,模块使用默认数据工作。

    【讨论】:

    • 如何让 perl 正确处理 *nix 和 win32 的 ~ 。当我尝试 mkdir "~/.config" 时,它实际上在 win32 中创建了一个 ./~/.config 文件夹
    • 真的是另一个问题,不是吗? 会做"@{[$ENV{HOME}//$ENV{HOMEPATH}//$ENV{USERPROFILE}]}/.modulerc" ...应该足够了。如果你的 perl
    【解决方案3】:

    要查找主目录,请参阅File::HomeDir。你不会想使用 ~ (因为那是一个 shell 的东西)。

    我建议尽可能让你的模块在没有 rc 文件的情况下工作。如果它不存在,代码应该回退到默认值。这也应该是正确的,即使文件存在,但缺少特定标志 - 它也应该回退到默认值。

    您可能想查看Config::Any。没有必要重新发明那个轮子。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2012-02-09
      • 2011-04-26
      相关资源
      最近更新 更多