我需要创建一个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,您可以删除该程序.该程序无需其他更改即可使用.)
尝试转出所需的配置.
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有很好的概述.
| 归档时间: |
|
| 查看次数: |
22186 次 |
| 最近记录: |