in reply to Converting HOH to a XML not working

G'day Sriram,

"When i print just $key, it prints outer hash keys,which is correct i.e productnames."

That doesn't seem right. Have you shown the real code you're using or are you incorrectly reporting the behaviour. With:

foreach my $key ( %${hashref} ){ .... }

Printing $key will give you something like:

product name 1 HASH(0xffffffff) product name 2 HASH(0xffffffff)

You need to start that loop more like this (i.e. include keys):

for my $key (keys %$hashref) {
"But,if i want to extract their corresponding inner hash key and values,Output is showing blank."

To print your "inner" values, you'll need to change lines like this

print $key->{'ProductName'}

to be more like this

print $hashref->{$key}{ProductName};

Another issue is that your subroutine definition, "sub getxml($) {...}", includes a prototype (see "perlsub: Prototypes"). Unless you have a specific reason for using a prototype and really understand why you're using it, I recommend that you remove it, i.e. just use "sub getxml {...}". That's a general recommendation for all of your subroutine definitions, not just this one.

In the previous paragraph I emphasised "really understand why you're using it". I did this because the only call you show to that subroutine, "&getxml($packagehash);", disables prototype checking (which tends to suggest that you don't really understand why you're using it). Again, unless you have a specific reason for doing this and really understand why you're doing it, I recommend that you call your subroutines without a leading ampersand (i.e. in this case, just use getxml($packagehash);). See "perlsub - Perl subroutines" for details.

-- Ken