我需要创建一个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};
---------------------
答案 0 :(得分: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};
- 迈克尔
答案 1 :(得分: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};
(如果您不想(或不能)安装YAML :: XS,可以删除::XS
。该程序无需其他更改即可使用。)
答案 2 :(得分:7)
尝试转出所需的配置。
use strict;
use warnings;
use YAML;
my %settings = (
foo => 1,
bar => [qw/one two three/],
);
print Dump(\%settings);
打印
---
bar:
- one
- two
- three
foo: 1
此外,如果规范有点过于密集,维基百科有一个很好的overview of YAML。