通过perl使用时,我在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);
这会转出
---
- '<define_name>': undef
现在当我将代码更改为与YAML :: Dump转储的格式相同时
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
欢迎任何建议。
答案 0 :(得分:5)
格式YAML
(模块)期望的是:
---
-
'<define_name>': undef
然而,
---
- '<define_name>': undef
是有效的YAML(格式)。如果您阅读YAML
的文档,您会发现以下警告:
如果您希望使用正常的转储/加载进行强大而快速的YAML处理 API,请考虑切换到YAML :: XS。它是迄今为止最好的Perl 此时为YAML模块。它要求你有一个C编译器, 因为它是用C语言编写的。
YAML::XS
对任何一个版本的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'
}
];