YAML ではどう書くか perl に教えてもらう方法

設定ファイルを書くときに、単純なハッシュやリストのときは良いのですが、データ構造が複雑になってきたときは、ちょっとややこしくなってきます。

そんなときは、YAML::Dump() に教えてもらえます。

#!/usr/bin/perl
use strict;
use warnings;
use YAML;

my $data = {
    key01 => 'val01',
    key02 => [
        'val03',
        'val04',
        {
            key03 => 'val05',
            key04 => 'val06',
        },
    ],
    key05 => {
        key06 => 'val07',
        key07 => 'val08',
    },
    key08 => {
        key09 => {
            key10 => [ 'val09', 'val10', 'val11' ],
        },
    },
    kye11 => {
        key12 => [
            key13 => [ qw/val12 val13 val14/ ],
            key14 => [ qw/val15 val16 val17/ ],
        ],
    },
};

$data->{key16} = {
    key17 => $data->{key02}[2],
    key18 => $data->{key08}{key09},
};

print Dump $data;

書き慣れた perl でデータを書いて、Dump に渡すだけです。値にリファレンスを持っていると、ちゃんとアンカーに変換してくれます。

---
key01: val01
key02:
  - val03
  - val04
  - &1
    key03: val05
    key04: val06
key05:
  key06: val07
  key07: val08
key08:
  key09: &2
    key10:
      - val09
      - val10
      - val11
key16:
  key17: *1
  key18: *2
kye11:
  key12:
    - key13
    -
      - val12
      - val13
      - val14
    - key14
    -
      - val15
      - val16
      - val17

ただ、FormValidator::Simple の

{ date => ['year', 'month', 'day'] } => [ 'DATE' ]

のように、キーがハッシュリファレンスになるようなものは、リファレンスが文字列に変換されてしまい使えません。おそらく、YAMLシンタックス自体が対応してないと予想していますが、ちゃんと仕様を調べてはいません。