Я должен создать файл 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};
---------------------
Попробуйте выгрузить нужную конфигурацию.
use strict;
use warnings;
use YAML;
my %settings = (
foo => 1,
bar => [qw/one two three/],
);
print Dump(\%settings);
Это печатает
---
bar:
- one
- two
- three
foo: 1
Кроме того, в Википедии есть хороший обзор YAML , если спецификация слишком плотная.
Ваша основная проблема заключается в что 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};
(Вы можете удалить :: XS
, если не хотите (или не можете) устанавливать YAML :: XS. Программа не будет работать без других изменений .)
Попробуйте это:
#!/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};
- Майкл