PerlでYAML形式のファイルを読み込む方法
PerlでYAML形式のファイルを読み込む方法を紹介します。
1.YAMLとは
YAMLは「YAML Ain't Markup Language(YAMLはマークアップ言語ではない)」の略で、インデント(半角スペース)を使ってデータの階層構造を表現します。
以下にYAMLデータのサンプルをいくつか掲載します。
ハッシュの表現(sample1.yaml)
name: apple
price: 50
配列の表現(sample2.yaml)
- 100
- 200
- 300
ハッシュの階層表現(sample3.yaml)
fruit1:
name: apple
price: 50
fruit2:
name: orange
price: 100
ハッシュと配列の階層表現(sample4.yaml)
fruits:
- name: apple
price: 50
- name: orange
price: 100
vegetables:
- name: tomato
price: 150
- name: oninon
price: 200
2.YAMLファイルの読み込み
YAMLファイルのsample1.yamlからsample4.yamlを、CPANモジュールのYAML::Tinyを利用して読み込んでみます。
YAMLファイルを読み込むにはreadメソッドを利用します。
#!/usr/bin/perl
use strict;
use YAML::Tiny;
my $data= YAML::Tiny->new;
$data = YAML::Tiny->read( 'sample1.yaml' );
print Dumper($data);
上記のコードでYAMLファイルをハッシュ・配列として取得できますが、取得したデータ全体は無名配列でラップされるようなので、あらかじめ次の1行を追加しておきます。
(前略)
my $data= YAML::Tiny->new;
$data = YAML::Tiny->read( 'sample1.yaml' );
my $yaml = $data->[0];
print Dumper($yaml);
3.サンプルのYAMLファイルの読み込みとデータ取得
2項のプログラムを使ったsample1.yaml~sample4.yamlの読み込み結果とデータ取得方法を掲載しておきます。
sample1.yamlの読み込み結果
$VAR1 = {
'name' => 'apple',
'price' => '50'
};
sample1.yamlからnameの値「apple」を取得するには、無名ハッシュのお作法でハッシュキー「name」を指定します。
$yaml->{name};
sample2.yamlの読み込み結果
$VAR1 = [
'100',
'200',
'300'
];
sample2.yamlから配列の最初の値「100」を取得するには、無名配列のお作法で配列の要素を指定します。
my $yaml = $data->[0];
sample3.yamlの取得結果
$VAR1 = {
'fruit1' => {
'name' => 'orange',
'price' => '100'
},
'fruit2' => {
'name' => 'apple',
'price' => '50'
}
};
sample3.yamlからfruit1のnameの値「orange」を取得するには、無名ハッシュを階層で指定します。
print $yaml->{fruit1}->{name};
sample4.yamlの取得結果
$VAR1 = {
'fruits' => [
{
'name' => 'apple',
'price' => '50'
},
{
'name' => 'orange',
'price' => '100'
}
],
'vegetables' => [
{
'name' => 'tomato',
'price' => '150'
},
{
'name' => 'oninon',
'price' => '200'
}
]
};
sample4.yamlからvegetablesの2つめ配列のpriceの値「200」を取得するには、無名ハッシュと無名配列を組み合わせて次のように指定します。
print $yaml->{vegetables}->[1]->{price};
- Perlでansibleライブラリを作成する方法
- perlのCPANモジュールからRPMを作成する方法
- Perlで「Subroutine permission redefined at~」を抑止する方法
- XML::Simpleのインストールでエラーになる場合の対処
- YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処
- Perlの正規表現を使って文字列をまとめて取得する方法
- Perlのハッシュでキーの有無を調べる方法
- perlで配列の途中の要素を削除する方法
- YAML::Tinyでコロンを利用する方法
- Perlで改行コードがCRのファイルを読み込む方法
- Perlで「Possible precedence issue with control flow operator」という警告の対処
- PerlのLWPで「Can't verify SSL peers without knowing which Certificate Authorities to trust」というエラーになったときの対処
- Perl+Windowsでファイルを再帰的にリネームする方法
- Perlプログラムの中でファイルの一部を書き換える方法
- Perlの「Bareword "%s" not allowed while "strict subs" in use~」というエラーについて