如何加载 YAML 配置文件
配置文件由程序员使用来存储局部变量,因为它通常比编辑源代码更新配置文件更好。 YAML 是一种流行的数据序列化语言,易于阅读,可以将常见的 Perl 变量(标量、数组和大括号)序列化。本文描述了如何在 Perl 中读取 YAML 配置文件并访问配置文件的变量。
配置文件
YAML 定义了不同类型的 数据集合,可以用来序列化(表示或存储)Perl 变量。让我们定义一个 YAML 配置文件来存储一些局部电子邮件数据。config.yaml 文件可能看起来像这样
---
emailName: David
emailAddresses:
- sillymoos@cpan.org
- perltricks.com@gmail.com
credentials:
username: sillymoose
password: itsasecret
让我们逐步分析 config.yaml:配置文件以三个连字符(“—”)开始,表示文档的开始,“emailName”:是一个具有值“David”的标量映射,“emailAddresses”是一系列电子邮件地址,“credentials”是电子邮件用户名和密码的标量映射。
加载配置文件
Perl 的 YAML::XS 模块提供了一个 LoadFile
子例程,可以用来将任何 YAML 文件读取到标量变量中。此脚本加载“config.yaml”配置文件并使用 Data::Dumper 打印它
use strict;
use warnings;
use YAML::XS 'LoadFile';
use Data::Dumper;
my $config = LoadFile('config.yaml');
print Dumper($config);
如果我们运行此脚本,我们会得到以下结果
$VAR1 = {
'emailName' => 'David',
'credentials' => {
'password' => 'itsasecret',
'username' => 'sillymoose'
},
'emailAddresses' => [
'sillymoos@cpan.org',
'perltricks.com@gmail.com'
]
};
这些结果表明 config.yaml 已被读取到 $config
中,作为具有三个键的哈希引用:“emailName”、“credentials”和“emailAddresses”。
访问配置数据
到目前为止,该脚本已将 config.yaml 的内容读取到 $config
中。要访问配置数据,我们需要从 $config
中解引用数据。以下脚本显示了访问配置标量、数组和哈希数据的示例。
use YAML::XS 'LoadFile';
use feature 'say';
my $config = LoadFile('config.yaml');
# access the scalar emailName
my $emailName = $config->{emailName};
# access the array emailAddresses directly
my $firstEmailAddress = $config->{emailAddresses}->[0];
my $secondEmailAddress= $config->{emailAddresses}->[1];
# loop through and print emailAddresses
for (@{$config->{emailAddresses}}) { say }
# access the credentials hash key values directly
my $username = $config->{credentials}->{username};
my $password = $config->{credentials}->{password};
# loop through and print credentials
for (keys %{$config->{credentials}}) {
say "$_: $config->{credentials}->{$_}";
}
更多 YAML
YAML::XS 使用 libyaml C 库并提供强大的性能和对 YAML 规范的遵循。但是,如果您在安装 YAML::XS 时遇到困难,还有纯 Perl 的替代方案:YAML 不再积极维护,存在一些错误,但文档优秀,通常可以正常工作,YAML::Tiny 是一个较新的模块,实现了 YAML 规范的有用子集。
本文最初发布在 PerlTricks.com 上。
标签
反馈
这篇文章有什么问题吗?请通过在 GitHub 上打开一个问题或拉取请求来帮助我们。