Что такое YAML?
YAML — это формат данных, ориентированный на работу со сложными структурами данных. Имеет очень простую, интуитивно понятную систему разметки. В основном, используется как формат для конфигурационных файлов.
Пример конфигурационного файла, в формате yaml:
|
1 2 3 4 5 6 7 8 9 10 11 |
# параметры подключения к базам данных dev_lab: database: 'dev_lab_db' host: 'localhost' username: 'dev_lab_user' password: 'password1' woman_blog: database: 'woman_blog_db' host: 'localhost' username: 'woman_blog_user' password: 'funnypass' |
И еще один пример:
|
1 2 3 4 5 6 7 8 9 |
--- handlers: - action_type: send_comment handler: comment - action_type: - get_post - send_post - remove_post handler: post |
Примеры использования модуля Config::YAML
Config::YAML - это объектно-ориентированная обертка вокруг модуля YAML. Делает работу с конфигурационными файлами очень простой и удобной.
Модуль Config::YAML позволяет использовать методы read и write, для чтения yaml-структуры из файла и ее записи в файл. Метод read вызывается при создании объекта Config::YAML.
Кроме того, Config::YAML предоставляет два метода для работы с элементами структуры данных: get_[param] и set_[param].
- get_[param] - получает значение заданного элемента из yaml-структуры
- set_[param] - задает значение указанному элементу в yaml-структуре
Чтение yaml-файла
Исходное содержимое конфигурационного файла right.yaml:
|
1 2 3 4 5 |
moderator_action: - 'edit_comment' - 'remove_comment' - 'user_block' - 'modify_user_profile' |
Пример 1
Пример perl-кода для чтения yaml-файла:
|
1 2 3 4 5 6 7 8 9 10 11 |
#!/usr/bin/perl use strict; use warnings; use Config::YAML; use Data::Dumper; my $config = Config::YAML->new( config => '../conf/right.yaml' ); print Dumper($config); |
Результат работы скрипта:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
% perl test_yaml.pl $VAR1 = bless( { 'moderator_action' => [ 'edit_comment', 'remove_comment', 'user_block', 'modify_user_profile' ], '_strict' => 0, '_infile' => '../conf/right.yaml', ... |
Пример 2
Помимо исходных данных, считанных из yaml файла и преобразованных в сложную структуру данных, модуль Config::YAML добавит в эту сложную структуру еще несколько записей служебного характера. Подобные записи имеют ключ с префиксом из знака подчеркивания (например, '_infile').
Можно отфильтровать подобные записи с помощью конструкции:
|
1 2 3 4 5 6 7 8 9 10 |
use Config::YAML; use Data::Dumper; my $config = Config::YAML->new( config => '../conf/right.yaml' ); my %result = map { $_ => $config->{ $_ }; } grep { $_ !~ /^_/ } keys( %{ $config } ); print Dumper(\%result); |
Результат:
|
1 2 3 4 5 6 7 8 9 10 |
% perl test_yaml.pl $VAR1 = { 'moderator_action' => [ 'edit_comment', 'remove_comment', 'user_block', 'modify_user_profile' ], }; |
Пример 3
После того, как yaml-файл прочитан, можно обращаться к его элементам, как к обычной сложной структуре данных:
|
1 2 3 4 5 |
use Config::YAML; my $config = Config::YAML->new( config => '../conf/right.yaml' ); print $config->{'moderator_action'}->[1]; |
Вывод скрипта:
|
1 2 3 |
% perl test_yaml.pl remove_comment |
Пример 4
Еще один пример обращения к элементам структуры данных:
|
1 2 3 4 5 6 |
my $config = Config::YAML->new( config => '../conf/right.yaml' ); foreach (keys %{$config}) { print $_.": ".$config->{$_}."\n"; } |
Результат:
|
1 2 3 4 5 6 7 |
% perl test_yaml.pl moderator_action: ARRAY(0x5cf6ff0) _strict: 0 _infile: ../conf/right.yaml admin_action: ARRAY(0x5cf7000) _outfile: ../conf/right.yaml |
Создание файла yaml из сложной структуры данных
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
use Config::YAML; my $c = Config::YAML->new( config => 'yaml_dump.txt', param1 => ['item1', 'item2', 'item3'], param2 => 'value2', paramN => {'paramN1' => 'valueN1'}, ); my @list = qw(text1 text2); $c->set_param4(\@list); # Записываем структуру в файл $c->write; |
Содержимое файла yaml_dump.txt после записи:
|
1 2 3 4 5 6 7 8 9 10 11 |
--- param1: - item1 - item2 - item3 param2: value2 param4: - text1 - text2 paramN: paramN1: valueN1 |
Полезные ссылки
Википедия: YAML
search.cpan.org: Описание модуля Config::YAML