You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Perl创建XML时出现$tag未定义编译错误如何解决

错误原因

代码第18行使用了未声明的变量$tag:你在循环中创建XML元素节点时声明的变量名是$element,变量名笔误触发了use strict模式下的编译错误。
另外默认调用toString()方法输出的是无缩进、无换行的紧凑XML格式,和你预期的带缩进排版不符,需要额外传参开启格式化输出。

修复步骤
  • 把第18行的$tag->appendTextNode($value);修改为$element->appendTextNode($value);,将文本内容正确追加到当前创建的元素节点上。
  • 将最后一行的print $doc->toString();修改为print $doc->toString(1);,传入参数1开启格式化缩进,输出排版和预期一致。

修复后的完整可运行代码:

#!/usr/bin/env perl

#
# Create a simple XML document
#

use strict;
use warnings;
use XML::LibXML;

my $doc = XML::LibXML::Document->new('1.0', 'utf-8');

my $root = $doc->createElement('my-root-element');
$root->setAttribute('some-attr'=> 'some-value');

my %elements = (
    color => 'blue',
    metal => 'steel',
);

for my $name (keys %elements) {
    my $element = $doc->createElement($name);
    my $value = $elements{$name};
    $element->appendTextNode($value);
    $root->appendChild($element);
}

$doc->setDocumentElement($root);
print $doc->toString(1);
补充说明

Perl原生哈希的键遍历顺序是不确定的,如果你需要严格固定子元素的输出顺序(比如color始终在metal之前),不要用哈希存储元素键值对,可以改用数组保证顺序:

my @elements = (
    color => 'blue',
    metal => 'steel',
);

for (my $i = 0; $i < @elements; $i += 2) {
    my $name = $elements[$i];
    my $value = $elements[$i+1];
    my $element = $doc->createElement($name);
    $element->appendTextNode($value);
    $root->appendChild($element);
}

执行perl test2.pl即可正常输出符合预期格式的XML文档,不会再出现编译报错。

内容的提问来源于stack exchange,提问作者Monica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:12:21