use strict; use warnings; use Data::Dumper; my $var = '<![CDATA[US]]>'; unwrap_cdata($var); print $var."\n"; my $hash = { america => '<![CDATA[US]]>', europe => ['<![CDATA[IT]]>','<![CDATA[UK]]>'], }; print Dumper $hash; unwrap_cdata($hash); print Dumper $hash; #### sub unwrap_cdata { for (@_) { eval { unwrap_cdata(@$_); 1 } and next; eval { unwrap_cdata(values %$_); 1 } and next; s///; s/]]>//; } }