通过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);
Run Code Online (Sandbox Code Playgroud)
抛弃了
---
- '<define_name>': undef
Run Code Online (Sandbox Code Playgroud)
现在,当我将代码更改为具有与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);
Run Code Online (Sandbox Code Playgroud)
它无法加载它并给我错误
Uncaught exception from user code:
YAML Error: Couldn't parse single line value
Code: YAML_PARSE_ERR_SINGLE_LINE
Line: 2
Document: 1
Run Code Online (Sandbox Code Playgroud)
欢迎任何建议.
格式YAML(模块)期望的是:
---
-
'<define_name>': undef
Run Code Online (Sandbox Code Playgroud)
然而,
---
- '<define_name>': undef
Run Code Online (Sandbox Code Playgroud)
是有效的YAML(格式).如果您阅读了相关文档YAML,您会发现以下警告:
如果您想使用常规转储/加载API进行稳健快速的YAML处理,请考虑切换到YAML :: XS.它是目前YAML最好的Perl模块.它要求你有一个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);
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = [
{
'<define_name>' => 'undef'
}
];
$VAR2 = [
{
'<define_name>' => 'undef'
}
];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |