2016-10-13 8 views
2

perlで使用している場合、YAMLでこの問題に直面しています。誰かが私がどこに間違っているか教えてくれますか?Perl YAML :: LoadがYAML :: DumpによってダンプされたYAMLを読み込めません。

私はYAMLでダンプされたものと同じ形式を持つようにコードを変更したときにコードスニペット

use YAML; 
... 
my $ifdef_struct = YAML::Load(<<'DS_TEMPLATE'); 
--- 
'<define_name>': undef 
DS_TEMPLATE 
my @tmp; 
push(@tmp, $ifdef_struct); 
$ifdef_struct = \@tmp; 
print YAML::Dump($ifdef_struct);  

これは今

--- 
    - '<define_name>': undef 

をダンプしてい::は

use YAML; 
... 
my $ifdef_struct = YAML::Load(<<'DS_TEMPLATE'); 
--- 
- '<define_name>': undef 
DS_TEMPLATE 
my @tmp; 
push(@tmp, $ifdef_struct); 
# $ifdef_struct = \@tmp; 
print YAML::Dump($ifdef_struct);  
をダンプ

ロードできず、エラーが表示されます

Uncaught exception from user code: 
    YAML Error: Couldn't parse single line value 
     Code: YAML_PARSE_ERR_SINGLE_LINE 
     Line: 2 
     Document: 1 

ご提案は大歓迎です。

答えて

5

フォーマットYAML(モジュール)が期待される:

--- 
- 
    '<define_name>': undef 

しかし、

--- 
- '<define_name>': undef 

が有効YAML(フォーマット)です。あなたがYAMLのドキュメントを読めば、あなたは次の警告見つける:あなたは、通常のダンプ/ロード APIを使用して堅牢で高速なYAML処理をしたい場合は

を、YAMLへの切り替えを検討してください:: XS。現時点ではYAML用Perl モジュールが最適です。

#!/usr/bin/perl 

use strict; 
use YAML::XS; 
use Data::Dumper; 
use warnings; 

my $one_line = YAML::XS::Load(<<'EOS'); 
--- 
- '<define_name>': undef 
EOS 

my $multi_line = YAML::XS::Load(<<'EOS'); 
--- 
- 
    '<define_name>': undef 
EOS 

print Dumper($one_line, $multi_line); 

出力:

$VAR1 = [ 
      { 
      '<define_name>' => 'undef' 
      } 
     ]; 
$VAR2 = [ 
      { 
      '<define_name>' => 'undef' 
      } 
     ]; 
それはそれはC.

YAML::XSで書かれたYAMLのいずれかのバージョンでは問題がありませんので、あなたはCコンパイラ、 を持っていることが必要です

関連する問題