Простой пример использования данных из файла конфигурации YAML в скрипте Perl - PullRequest
10 голосов
/ 11 августа 2010

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

Ответы [ 3 ]

16 голосов
/ 11 августа 2010

Попробуйте это:

#!/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};

- Майкл

14 голосов
/ 11 августа 2010

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

7 голосов
/ 11 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...