2016-10-13 2 views
2

perl을 사용할 때 YAML에이 문제가 발생합니다. 누군가 내가 잘못 가고 있다고 말할 수 있습니까?Perl YAML ::로드가 YAML :: Dump에 의해 덤프 된 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);  

내가 덤프 :: YAML에 의해 덤프 것과 같은 형식을 가지고 코드를 변경할 때이 지금

--- 
    - '<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를. 현재 Perl YAML 용 모듈이 가장 좋습니다.

#!/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 컴파일러, 이 있어야합니다