use warnings;
use strict;
use Data::Dump;
use XML::Rules ();
my $XML1 = 'X';
my $XML2 = 'Y
Z';
my $parser = XML::Rules->new(
stripspaces => 3|4,
rules => [
root => 'pass',
phone => 'as is',
callTo => 'content array',
_default => sub { die "Unknown tag $_[0]" },
] );
dd $parser->parse($XML1);
dd $parser->parse($XML2);
__END__
{ phone => { callTo => ["X"] } }
{ phone => { callTo => ["Y", "Z"] } }
####
use XML::Simple qw/:strict XMLin/;
dd XMLin($XML1, KeyAttr=>{}, ForceArray=>[]);
dd XMLin($XML2, KeyAttr=>{}, ForceArray=>[]);
dd XMLin($XML1, KeyAttr=>{}, ForceArray=>['callTo']);
__END__
{ phone => { callTo => "X" } }
{ phone => { callTo => ["Y", "Z"] } }
{ phone => { callTo => ["X"] } }
##
##
foo( "one" );
foo( ["two", "three"] );
sub foo {
my $x = shift;
# the following does the trick
my @values = ref $x eq 'ARRAY' ? @{$x} : $x;
for my $val (@values) {
print "<$val>\n";
}
}
__END__