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