试图通过多种方式寻找这个方法,但还没有找到答案......
背景
我正在开发一个传统的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/
文件夹(或其他平台上的等价物)吗?
问题
答案 0 :(得分:0)
除非您不打算在非基于unix的主机上运行代码,否则根据conventional directory layout和filesystem hierarchy standard,您可能会依赖大量众所周知的地方。
无论如何,没有什么能阻止你动态构建文件搜索规范,以考虑平台怪异性及其获取方式(例如File::HomeDir::Win32
vs File::HomeDir
)。