Простой пример использования данных из файла конфигурации YAML в Perl script

Мне нужно создать файл 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};
---------------------

Ответ 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};

- Майкл

Ответ 2

Ваша основная проблема заключается в том, что 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. Программа будет работать без каких-либо изменений.)

Ответ 3

Попробуйте сбросить нужную конфигурацию.

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, если спецификация слишком плотная.