2017-12-20 18 views
2

가정하자 나는 다음과 같은 YAML 파일을했습니다 :포스 YAML :: 작은 값은 숫자가 될

$TASKS = YAML::Tiny->read(<YAML_file>); 

그리고 나 ': 나는 작은 펄과 YAML을 사용하여 파일 : 읽기

--- 
task: 
    1: 
    command: '<task1_command>' 
    desc: '<task1_description>' 
    2: 
    command: '<task2_command>' 
    desc: '<task2_description>' 

일반적으로 내림차순/명령 값을 사용할 수 있어요하지만 내가 사용하는 작업 데이터를 작성하는 경우 :
$TASKS->write(<YAML_file>); 

나는 다음을 가지고 :

--- 
task: 
    '1': 
    command: '<task1_command>' 
    desc: '<task1_description>' 
    '2': 
    command: '<task2_command>' 
    desc: '<task2_description>' 

작업 번호는 작은 따옴표로 묶습니다. YAML :: Tiny가 작업 값을 "문자열"대신 "숫자"로 처리하도록 강제하는 방법이 있습니까?

답변

2

이이 주위에 방법이 될 것 같습니다 및 버그 여기에 제출 된 것 같습니다하지 않습니다 ---

YAML::Tiny

그러나이과 같이 YAML을 사용하여 수행 할 수 있습니다

#!/usr/bin/perl 

use warnings; 
use strict; 
use YAML; 

{ 
    no warnings; 
    local $YAML::Numify = 1; 
} 

my $file = YAML::LoadFile('test.yml'); 

open my $fh, '>', 'output.yml'; 
print $fh YAML::Dump $file; 
close($fh); 
  • 경고를 사용하면 로컬 YAML :: Numify를 중괄호로 묶고 경고없이 경고를 표시하는 메시지가 나타납니다. 출력은 참으로 중 예상되는 방식

test.yml

--- 
task: 
    '1': 
    desc: '85' 
    command: '<task1_command>' 
    2: 
    desc: '100' 
    command: '<task2_command>' 

--- 
task: 
    1: 
    command: '<task1_command>' 
    desc: 85 
    2: 
    command: '<task2_command>' 
    desc: 100 
1
+0

다른 것을 움직이지 않고'local $ YAML :: Numify = 1; '에 중괄호를 추가하면 그 점이 완전히 제거됩니다. Perl이'}'에 도달하면'$ YAML :: Numify'는 더 이상 그 값을 갖지 않습니다. 블록 안에'LoadFile' 호출을 이동시켜야합니다. 이를 수정하더라도':: Numify '의 값은 아무런 차이가없는 것으로 보인다. – Dre

2

및 데이터에 2 output.yml 해시 키로서 사용된다 상응하는 펄 데이터 구조에서, 그래서 항상 문자열이어야합니다. 당신의 read 호출의 결과는 숫자 것처럼 당신은 단지 숫자 문자열을 사용하는 경우 펄이 옳은 일을 항상한다, 그러나이

bless([ 
    { 
    task => { 
     1 => { command => "<task1_command>", desc => "<task1_description>" }, 
     2 => { command => "<task2_command>", desc => "<task2_description>" }, 
    }, 
    }, 
], "YAML::Tiny") 

될 것입니다, 그래서 그것을 응용 프로그램에 대해 무엇인지 궁금하네요 이 값이 "숫자"가 필요합니다

+0

맞습니다. 모든 것이 응용 프로그램 동작에 문제가 없습니다. 문제는 응용 프로그램이 일부 작업 값을 변경할 수 있으며 YAML 파일을 다시 작성하면 ($ TASKS-> write ()) 작은 따옴표가 불필요하게됩니다 모든 작업 번호에 추가됩니다. –

+0

@Marcelo : 수신 프로그램에 문제가 있습니까? 아니면 그냥 좋아하지 않습니까? – Borodin

+0

큰 문제는 아닙니다 (따옴표가있는 파일은 같은 방식으로 작동합니다). 그러나 때때로 사람들은 파일 사이에 "diff"를 실행하고 추가 된 따옴표로 인해 많은 "차이점"을 찾습니다. –