在Perl中加载配置的最佳方法?

use*_*037 -2 perl configuration-files

我想为我的Perl脚本编写一个输入文件.
此文件包含我的程序的配置.

输入采用Perl格式:

my $var1 = "/home/moon";
my $var2 = 123;
my $var3 = "output.log";
...
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何以这种格式加载此配置文件.有人可以帮忙吗?

har*_*mic 7

将' do '与您希望作为参数提供的文件的名称一起使用.peldoc页面甚至有一个读取配置变量文件的例子.

请注意,为了能够访问调用脚本中的变量,您需要在主程序和使用'do'加载的配置文件中使用'our'来声明它们.

更方便的方法是使配置文件的内容成为匿名哈希,并将其分配给主程序中的变量.然后,您可以参考散列的键以获取各种配置设置.一个例子:

主程序:

my $config=do("configfile.pl");
die "Error parsing config file: $@" if $@;
die "Error reading config file: $!" unless defined $config;

print "Log File: $config->{logfile}\n";
Run Code Online (Sandbox Code Playgroud)

configfile.pl

{
    logfile => '/home/me/log.txt',
    someParam => 1234,
    someFile => '/home/me/some/file',
}
Run Code Online (Sandbox Code Playgroud)

另一件需要注意的事情是加载这样的安全文件可能存在安全风险.用户可以在文件中放置他们想要的任何内容,它将作为perl语句执行!如果加载文件的进程在拥有该文件的用户以外的用户下运行,则这尤其令人讨厌 - 例如,如果它将以root身份运行.

cpan上有很多模块可以为配置文件提供更好的解决方案,例如Config :: General或Config :: Simple.但只需使用'do'即可快速入侵.