【问题标题】:How should I distribute data files with Perl modules?我应该如何使用 Perl 模块分发数据文件?
【发布时间】:2012-02-14 23:57:13
【问题描述】:

我已经创建了一个module-starter(使用--builder=Module::Build)。我想使用SQL::Library 将我的SQL 收集到一个.ini 文件中......但是为了在运行时找到该文件,我需要知道它的确切路径。如何在运行时获取模块“数据目录”的路径?

到目前为止,我一直在使用 FindBin(比如 "$FindBin::Bin/../../path/to/module/datafiles/foo.ini",但我发现这不是很健壮(例如,当 PATH 中的两个不同目录中有两个同名程序时,它似乎会中断) .

【问题讨论】:

    标签: perl cpan


    【解决方案1】:

    这就是File::ShareDir 的用途。由于您使用的是 Module::Build,因此您需要设置 share_dir 参数(并且需要 Module::Build 0.36)才能将数据文件与模块一起安装。然后,在您的代码中,您将使用 File::ShareDir 来计算 foo.ini 的路径(例如 dist_file('My-Dist', 'foo.ini')

    【讨论】:

    • 在模块尚未安装时,我可以让File::ShareDir 从 bin/ 中的脚本或测试文件中查找文件吗?
    • @user1481,通过Build test 运行的脚本会找到该文件,因为在运行这些测试时模块已安装(在blib/ 中)。
    • @user1481,对于其他脚本,如果 File::ShareDir 返回的文件不存在,请执行 perl Build.PL && ./Build && perl -Mblib script.pl 或添加代码以回退到 "$FindBin::Bin/../share/foo.ini"
    • File::Share 与 File::ShareDir 完全相同,但在开发过程中可以看到 ./share 目录,无需安装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2012-07-14
    相关资源
    最近更新 更多