This is because the array of traps is stored as a reference to an anonymous array in one of the keys (TRAP_LIST) of the anonymous hash in the TRAPS key of the
%$hash. This means that when you try to print the keys and values of the
%{$hash->{TRAPS}} hash, you get the stringified array reference. To solve this you could add a special case to the output loop which prints the contents of the array.
# this handles ARRAYs and HASHes
# you may want to use Data::Dumper for debugging however
# the final code for processing the data structure will
# also be less generic than this code.
if (ref $value eq 'ARRAY') {
print "$key => (@$value)\n";
} elsif (ref $value eq 'HASH') {
print "$key => (%$value)\n";
} else
print "$key => $value\n";
}
--
integral, resident of freenode's #perl