Here's a simplified version:
use strict;
use warnings;
sub printElement
{
my ($tag, $content) = @_;
if (ref $content) {
my $attrHash = $content->[0];
print "<$tag>";
for (my $i = 1; $i < $#$content; $i += 2) {
printElement(@$content[$i, $i+1]);
}
print "</$tag>";
} else {
print $content;
}
}
sub printTree
{
printElement(@{ shift @_ });
print "\n";
}
my $tree =
['foo', [{}, 'head', [{id => "a"}, 0, "Hello ", 'em', [{}, 0, "there"]],
'bar', [ {}, 0, "Howdy", 'ref', [{}]],
0, "do"
]
];
printTree($tree);
, $attrHash. , , , XML. .: -)