Perl:覆盖结构成员值
我正在使用以下代码创建$input:Perl:覆盖结构成员值,perl,Perl,我正在使用以下代码创建$input: push(@{$input->{$step},$time),然后我将其保存在一个xml文件中,在下一次编译时,我从该文件中读取它。当我打印它时,我得到的结构如下 if(-e $file) my $input =XMLin($file...); 打印转储程序$input 我得到了这个结构 $VAR1 = { 'opt' => { 'step820' => '0', 'step
push(@{$input->{$step},$time)代码>,然后我将其保存在一个xml文件中,在下一次编译时,我从该文件中读取它。当我打印它时,我得到的结构如下
if(-e $file)
my $input =XMLin($file...);
打印转储程序$input代码>
我得到了这个结构
$VAR1 = {
'opt' => {
'step820' => '0',
'step190' => '0',
'step124' => '0',
}
};
每走一步都有时间
push(@{$input->{$step}},$time3);
XmlOut($file, $input);
如果我再次运行该程序,我会得到以下结构:
$VAR1 = {
'opt' => {
'step820' => '0',
'step190' => '0',
'step124' => '0',
'opt' => {
'step820' => '0',
'step190' => '0',
'step124' => '0'
}
}
我只需要覆盖步骤的值(例如:$var1->opt->step820=2)。我该怎么做
我只需要覆盖步骤的值(例如:$var1->opt->step820=2)。我该怎么做
查看XMLout的RootName
选项。默认情况下,当“XMLout()”生成XML时,根元素将命名为“opt”。此选项允许您指定替代名称
为RootName选项指定unde或空字符串将生成没有根元素的XML。我要说的是,每当有人发帖询问XML::Simple
——也就是说XML::Simple
是骗人的——一点也不简单
因此,在您的示例中:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my $xml= XML::Twig->new->parsefile($file);
$xml -> get_xpath('./opt/step820',0)->set_text("2");
$xml -> print;
问题是,XML::Simple
只适用于解析一开始并不真正需要XML的XML
类型
对于更简单的示例,您是否考虑过使用JSON
进行序列化?因为它更直接地反映了本机perl数据类型的哈希/数组结构
这样你就可以:
print {$output_fh} to_json ( $myconfig, {pretty=>1} );
并将其读回:
my $myconfig = from_json ( do { local $/; <$input_fh> });
给出以下结果:
{
"step190" : [
0
],
"step820" : [
0
],
"step124" : [
0
]
}
尽管事实上,我可能会:
foreach my $step ( qw ( step820 step190 step124 ) ) {
$input->{$step} = $time;
}
print to_json ( $input, {pretty=>1} );
这给了
{
"step190" : 0,
"step124" : 0,
"step820" : 0
}
JSON使用了与perl非常相似的约定,{}
表示键值对(散列),而[]
表示数组 首先不要使用XML::Simple,这很可怕。并发布一些带有所需输出的示例XML。。我知道还有其他方法,期望的输出与第一个转储输出相同<代码>$VAR1={'opt'=>{'step820'=>'0','step190'=>'0','step124'=>'0',}代码>我试图做的是访问这些值并修改它们请求XML::Simple,因为它是“基本的”(至少我告诉过它),它是基本的,就像试图通过旋转一块木头点火一样。这是一项艰苦的工作,而且容易失败,顺便问一下,你不想用你口袋里的打火机吗?
foreach my $step ( qw ( step820 step190 step124 ) ) {
$input->{$step} = $time;
}
print to_json ( $input, {pretty=>1} );
{
"step190" : 0,
"step124" : 0,
"step820" : 0
}