読者です 読者をやめる 読者になる 読者になる

NeverBlog::Likk::Unexistable;

見なかったことにして下さい

YAMLの適当さ。

いままで、インデントに対して凄い厳密かと思ったけどそうでもなかった。

use strict;
use warnings;
use YAML;
use YAML::Syck;
 
my $d = YAML::Syck::Load(<<"EOT");
 
indent1_0:
 indent1_1:
  indent1_2: foo
 
indent2_0:
  indent2_1:
    indent2_2: foo
 
indent_mix:
 indent_mix1:
   indent_mix2: foo
 
key_o:
  - array0_key1: _01
    array0_key2:
      - { _02_array0 : vvvv }
      - { _02_array1 : vvvv }
 
key_t:
  - array0_key1: _01
    array0_key2:
    - { _02_array0 : vvvv }
    - { _02_array1 : vvvv }
EOT
 
warn YAML::Dump $d;
local $Data::Dumper::Indent = 1;
warn Data::Dumper::Dumper $d;

これを実行すると

---
indent1_0:
  indent1_1:
    indent1_2: foo
indent2_0:
  indent2_1:
    indent2_2: foo
indent_mix:
  indent_mix1:
    indent_mix2: foo
key_o:
  - array0_key1: _01
    array0_key2:
      - _02_array0: vvvv
      - _02_array1: vvvv
key_t:
  - array0_key1: _01
    array0_key2:
      - _02_array0: vvvv
      - _02_array1: vvvv
$VAR1 = {
  'key_o' => [
    {
      'array0_key2' => [
        {
          '_02_array0' => 'vvvv'
        },
        {
          '_02_array1' => 'vvvv'
        }
      ],
      'array0_key1' => '_01'
    }
  ],
  'indent_mix' => {
    'indent_mix1' => {
      'indent_mix2' => 'foo'
    }
  },
  'indent2_0' => {
    'indent2_1' => {
      'indent2_2' => 'foo'
    }
  },
  'key_t' => [
    {
      'array0_key2' => [
        {
          '_02_array0' => 'vvvv'
        },
        {
          '_02_array1' => 'vvvv'
        }
      ],
      'array0_key1' => '_01'
    }
  ],
  'indent1_0' => {
    'indent1_1' => {
      'indent1_2' => 'foo'
    }
  }
};

こうなる。

インデントの深さ混ぜても問題無い上に期待したとおりに動いていて逆に怖い。