假设我有以下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>'
任务编号介于单引号之间!有没有办法“强迫”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);
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
在相应的Perl数据结构中用作哈希键,因此始终必须是字符串。你的read
电话的结果就是这个
bless([
{
task => {
1 => { command => "<task1_command>", desc => "<task1_description>" },
2 => { command => "<task2_command>", desc => "<task2_description>" },
},
},
], "YAML::Tiny")
但是,如果你只是使用一个数字字符串就好像它是一个数字,Perl会做正确的事情,所以我想知道你的应用程序是什么,要求这些值是“数字”