在Perl脚本中使用YAML配置文件中的数据的简单示例

use*_*625 10 perl yaml

我需要创建一个YAML文件来存储Perl脚本的一些配置数据.这似乎应该很容易,但我还没有能够解决它,我想如果我只有一个简单的例子来复制我会没事的.我想做这样的事情:

-----test.yaml-----
image_width: 500
show_values: 0
-------------------

------test.perl------
use YAML;

my (%settings) = Load('test.yaml');
print "The image width is", $settings{image_width};
---------------------
Run Code Online (Sandbox Code Playgroud)

msc*_*cha 16

试试这个:

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use YAML qw(LoadFile);

my $settings = LoadFile('test.yaml');
say "The image width is ", $settings->{image_width};
Run Code Online (Sandbox Code Playgroud)

- 迈克尔


cjm*_*cjm 14

这里你的根本问题是Load需要一个包含YAML的字符串,而不是文件名.您想要LoadFile(默认情况下不会导出).此外,如果可以,您应该使用YAML :: XS而不是YAML,因为它是一个更好的实现.(但是YAML应该足以用于简单的配置文件.)

另一个问题是LoadFile将返回一个哈希引用(好吧,如果你的YAML看起来像哈希,就像你的那样),而不是你可以用来初始化哈希的列表.

试试这个:

use strict;
use warnings;
use YAML::XS qw(LoadFile);

my $settings = LoadFile('test.yaml');

print "The image width is ", $settings->{image_width};
Run Code Online (Sandbox Code Playgroud)

(::XS如果您不想(或不能)安装YAML :: XS,您可以删除该程序.该程序无需其他更改即可使用.)

  • 对于配置文件,我更喜欢YAML :: Tiny. (2认同)

szb*_*int 7

尝试转出所需的配置.

use strict;
use warnings;

use YAML;

my %settings = (
        foo => 1,
        bar => [qw/one two three/],
);

print Dump(\%settings);
Run Code Online (Sandbox Code Playgroud)

这打印

---
bar:
  - one
  - two
  - three
foo: 1
Run Code Online (Sandbox Code Playgroud)

此外,如果规范有点过于密集,维基百科对YAML有很好的概述.