假设我有以下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;?
答案 0 :(得分:2)
似乎没有解决方法,看起来像这里提交了一个错误---
然而,这可以使用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)
数据中的1
和2
在相应的Perl数据结构中用作哈希键,因此始终必须是字符串。您read
来电的结果将是
bless([
{
task => {
1 => { command => "<task1_command>", desc => "<task1_description>" },
2 => { command => "<task2_command>", desc => "<task2_description>" },
},
},
], "YAML::Tiny")
然而,如果你只是使用一个数字字符串就好像它是一个数字,Perl会做正确的事情,所以我想知道你的应用程序是什么,要求这些值为“数字”