如何加载 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 上。

标签

David Farrell

David 是一位专业程序员,他经常在 推特博客 上分享代码和编程艺术的见解。

浏览他们的文章

反馈

这篇文章有什么问题吗?请通过在 GitHub 上打开一个问题或拉取请求来帮助我们。