强制YAML :: Tiny值为数字

时间:2017-12-20 13:25:54

标签: perl yaml

假设我有以下YAML文件:

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

我使用Perl和YAML :: Tiny阅读文件:

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

我能正常使用desc /命令值,但如果我使用以下方法编写TASKS数据:

$TASKS->write(<YAML_file>);

我得到了以下内容:

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

任务编号介于单引号之间!有没有办法强迫&#34;强迫&#34; YAML ::将任务值视为&#34;数字&#34;而不是&#34;字符串&#34;?

2 个答案:

答案 0 :(得分: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>'

<强> output.yml

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

答案 1 :(得分:2)

数据中的12在相应的Perl数据结构中用作哈希键,因此始终必须是字符串。您read来电的结果将是

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

然而,如果你只是使用一个数字字符串就好像它是一个数字,Perl会做正确的事情,所以我想知道你的应用程序是什么,要求这些值为“数字”