2007年7月6日

YAML と YAML::Syck の違い

いろいろと、YAML 周りを試行錯誤していて、YAML と YAML::Syck の違いを見つけたので、ご報告。。。
my $my_yaml = <<'__YAML__';
---
param1 : [ NOT_BLANK, ASCII, [ LENGTH, 2, 5 ] ]
? date: [ year, month, day ]
: [ DATE ]

__YAML__

use YAML;
use YAML::Syck;
use Data::Dumper;

my $data1 = YAML::Load($my_yaml);
my $data2 = YAML::Syck::Load($my_yaml);

print "--data1--\n", Dumper($data1);
print "--data2--\n", Dumper($data2);
上記のコードは、先日、苦労して見つけた、? と : の記法を用いて、ハッシュのキーに、ハッシュを持たせるための方法ですが、実はこの記法は、YAML では対応しているが、、YAML::Syck では、対応していないという事が発覚した!!上記のコードの実行結果は以下のようになった
--data1--
$VAR1 = {
'date: [ year, month, day ]' => [
'DATE'
],
'param1' => [
'NOT_BLANK',
'ASCII',
[
'LENGTH',
'2',
'5'
]
]
};
--data2--
$VAR1 = {
'HASH(0x8150b44)' => [
'DATE'
],
'param1' => [
'NOT_BLANK',
'ASCII',
[
'LENGTH',
'2',
'5'
]
]
};
Ingy++ !!
ちなみに、Dump も試してみたところ、、、
use YAML;
use YAML::Syck;

my $data = {
param1 => ['NOT_BLANK', 'ASCII', ['LENGTH', 2, 5]],
{ date => ['year', 'month', 'day'] } => ['DATE'],
};
print "--YAML::Dump--\n", YAML::Dump($data);
print "--YAML::Syck::Dump--\n", YAML::Syck::Dump($data);
実行結果、、、
--YAML::Dump--
---
HASH(0x815ebe4):
- DATE
param1:
- NOT_BLANK
- ASCII
-
- LENGTH
- 2
- 5
--YAML::Syck::Dump--
---
HASH(0x815ebe4):
- DATE
param1:
- NOT_BLANK
- ASCII
-
- LENGTH
- 2
- 5
って、どちらも、、ちゃんと Dump できないようでした、、、何か方法は無いのかなぁ、、(T_T)

追記:ハッシュになってるかと思いきや、、ただの文字列だった事に気づきました、、、このエントリーを見て、ハマッてしまった方、、大変、申し訳ありませんでした。。。m(__)m

0 件のコメント: