PerlでYAML形式のファイルを読み込む方法

PerlでYAML形式のファイルを読み込む方法

Posted at April 21,2014 1:33 AM
Tag:[Perl, YAML]

PerlでYAML形式のファイルを読み込む方法を紹介します。

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};
関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)