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

Я должен создать файл 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};
---------------------
10
задан user416625 10 August 2010 в 21:24
поделиться

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

Кроме того, в Википедии есть хороший обзор YAML , если спецификация слишком плотная.

7
ответ дан 3 December 2019 в 14:05
поделиться

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

14
ответ дан 3 December 2019 в 14:05
поделиться

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

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

- Майкл

16
ответ дан 3 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: