use strict;
use warnings;
use Data::Dumper;
my $var = '<![CDATA[US]]>';
$var = unwrap_cdata($var);
print $var."\n";
my $hash = { america => '<![CDATA[US]]>',
europe => ['<![CDATA[IT]]>','<![CDATA[UK]]>'],
};
print Dumper $hash;
$hash = unwrap_cdata($hash);
print Dumper $hash;
sub unwrap_cdata {
my $var = shift();
if (ref($var)) {
$var = unwrap_hash($var) if (ref($var) eq 'HASH');
$var = unwrap_array($var) if (ref($var) eq 'ARRAY');
} else {
$var = unwrap_scalar($var);
}
return $var;
}
sub unwrap_hash {
my $href = shift();
foreach my $key (keys %{$href}) {
my $hk = $href->{$key};
$hk = unwrap_hash($hk) if (ref($hk) eq 'HASH');
$hk = unwrap_array($hk) if (ref($hk) eq 'ARRAY');
$hk = unwrap_scalar($hk) if (not ref($hk));
$href->{$key} = $hk;
}
return $href;
}
sub unwrap_array {
my $aref = shift();
my @array;
my $i = -1;
foreach my $av (@{$aref}) {
$av = unwrap_hash($av) if (ref($av) eq 'HASH');
$av = unwrap_array($av) if (ref($av) eq 'ARRAY');
$av = unwrap_scalar($av) if (not ref($av));
push @array,$av;
}
return \@array;
}
sub unwrap_scalar {
my $var = shift();
$var =~ s///;
$var =~ s/]]>//;
return $var;
}