有没有办法在Perl脚本中获取系统配置文件文件夹?

时间:2015-07-23 21:18:41

标签: perl configuration

试图通过多种方式寻找这个方法,但还没有找到答案......

背景

我正在开发一个传统的Perl应用程序,它有很多硬编码值,应根据应用程序的安装位置进行配置。所以,显然,我希望将这些值外部化到一个配置文件中,该配置文件可能位于少数预期的#34;之中。位置。也就是说,使用传统方法检查配置文件:

  • 当前工作目录
  • 用户的主目录(或其中的子文件夹)和
  • 系统配置目录(或其中的子文件夹)

第一个获胜的地方。

我在哪里

稍微阅读了CPAN网站并找到Config::Any包,看起来很有希望。我可以给它一个要使用的文件列表:

use Config::Any;
my $config = Config::Any->load_files(
    {
        files => [qw(sample.conf /home/william/.config/sample.conf /etc/sample.conf)],
        use_ext => 0,
    });

这将检查每个文件是否存在,如果找到,则将内容加载到哈希引用的数组引用中。不错,但我仍然需要硬编码我搜索sample.conf文件的位置。在这里,我假设我正在使用Linux系统,并且该应用程序的所有用户的配置文件的位置是/etc/。我总是可以添加/usr/local/etc/,但无论如何,这不是系统无关的。

我可以使用File::HomeDir找到用户主文件夹进行搜索,无论运行应用程序的系统如何,它都能正常工作。那么有一个类似的包可以提供/etc/文件夹(或其他平台上的等价物)吗?

问题

  • 有没有办法做到这一点,而不必知道我在使用什么特定的操作系统? (Perl包或代码片段)
  • 什么是" Perl最佳实践"完成这个的方法?我无法想象以前没有其他人遇到这种情况。

1 个答案:

答案 0 :(得分:0)

除非您不打算在非基于unix的主机上运行代码,否则根据conventional directory layoutfilesystem hierarchy standard,您可能会依赖大量众所周知的地方。

无论如何,没有什么能阻止你动态构建文件搜索规范,以考虑平台怪异性及其获取方式(例如File::HomeDir::Win32 vs File::HomeDir)。