无法在对 XML::Generator 的调用中循环
Unable to loop inside a call to XML::Generator
我正在尝试使用 for
循环将数组 @cpuinfo
中的每个项目放入单独的 <cpu>
元素中
在 XML 文档中
使用 XML::Generator.
# @cpuinfo contain cpu information of multiple cpu's
use XML::Generator;
my $gen = XML::Generator->new( 'escape' => 'always', 'pretty' => 10 );
my $xml = $gen->servers(
$gen->server(
$gen->cpuinfo(
foreach $r (@cpuinfo){
$gen->cpu;
( { $gen->cpu( @cpuinfo[$r] );
}
)
}
)
),
);
您似乎对 Perl 一点也不熟悉,这不是教程的地方,但是大多数语言不允许您将可执行循环放入参数列表中。您需要的是调用 map
,将一个数据列表 "maps" 转换为另一个数据列表。在本例中,它将 @cpuinfo
中的文本项列表映射到 XML::Generator
对象列表,每个对象代表一个 <map>
元素
请记住,您 必须始终 use strict
和 use warnings 'all'
在 每个 Perl 程序的顶部编写并声明每个带有 my
的变量尽可能接近它的第一个使用点,最好是在它被定义的地方
use strict;
use warnings 'all';
use XML::Generator;
my @cpuinfo = qw/ A B C /;
my $gen = XML::Generator->new( escape => 'always', pretty => 2 );
my $xml = $gen->servers(
$gen->server(
$gen->cpuinfo(
map { $gen->cpu($_) } @cpuinfo
)
)
);
print $xml, "\n";
输出
<servers>
<server>
<cpuinfo>
<cpu>A</cpu>
<cpu>B</cpu>
<cpu>C</cpu>
</cpuinfo>
</server>
</servers>
我正在尝试使用 for
循环将数组 @cpuinfo
中的每个项目放入单独的 <cpu>
元素中
在 XML 文档中
使用 XML::Generator.
# @cpuinfo contain cpu information of multiple cpu's
use XML::Generator;
my $gen = XML::Generator->new( 'escape' => 'always', 'pretty' => 10 );
my $xml = $gen->servers(
$gen->server(
$gen->cpuinfo(
foreach $r (@cpuinfo){
$gen->cpu;
( { $gen->cpu( @cpuinfo[$r] );
}
)
}
)
),
);
您似乎对 Perl 一点也不熟悉,这不是教程的地方,但是大多数语言不允许您将可执行循环放入参数列表中。您需要的是调用 map
,将一个数据列表 "maps" 转换为另一个数据列表。在本例中,它将 @cpuinfo
中的文本项列表映射到 XML::Generator
对象列表,每个对象代表一个 <map>
元素
请记住,您 必须始终 use strict
和 use warnings 'all'
在 每个 Perl 程序的顶部编写并声明每个带有 my
的变量尽可能接近它的第一个使用点,最好是在它被定义的地方
use strict;
use warnings 'all';
use XML::Generator;
my @cpuinfo = qw/ A B C /;
my $gen = XML::Generator->new( escape => 'always', pretty => 2 );
my $xml = $gen->servers(
$gen->server(
$gen->cpuinfo(
map { $gen->cpu($_) } @cpuinfo
)
)
);
print $xml, "\n";
输出
<servers>
<server>
<cpuinfo>
<cpu>A</cpu>
<cpu>B</cpu>
<cpu>C</cpu>
</cpuinfo>
</server>
</servers>