I don't understand the question.
If you use ForceArray => [qw( product color )],
foreach $products (@{$file->{product}}) {
print "Widget: " . $products->{title} ." \n";
print "Rating: " . $products->{rating} . "\n";
print " Cost: " . $products->{cost} . "\n";
print "Colors: " . join(', ', @{$products->{color}})."\n\n";
}
will work for
<shelf>
<product>
<title>widget3</title>
<cost>0.50</cost>
<rating>S</rating>
<color>white</color>
</product>
</shelf>
and
<shelf>
<product>
<title>widget1</title>
<cost>0.10</cost>
<rating>B</rating>
<color>red</color>
<color>blue</color>
<color>green</color>
</product>
<product>
<title>widget2</title>
<cost>0.25</cost>
<rating>S</rating>
<color>pink</color>
<color>gray</color>
<color>orange</color>
</product>
</shelf>
and everything in between. Without ForceArray, you'd need
sub list {
if (defined(ref($_[0])) && ref($_[0]) eq 'ARRAY') {
return @{ $_[0] };
} else {
return $_[0];
}
}
foreach $products (list($file->{product})) {
print "Widget: " . $products->{title} ." \n";
print "Rating: " . $products->{rating} . "\n";
print " Cost: " . $products->{cost} . "\n";
print "Colors: " . join(', ', list($products->{color}))."\n\n";
}
So what's the problem?
|