In article <[EMAIL PROTECTED]>, John W. Krahn wrote:

> Sharad Gupta wrote:
>> 
>> Hi Friends,
> 
> Hello,

Hi,

>> I have a hash whose values can be either array, hash  etc.
>> 
>> say i have:
>> 
>> my $self = {
>>     'hello how' => {
>>         'r u' => 'I am',
>>         ....
>>         ....
>>         },
>>     'fine thank' => ['you'],
>>     'see ya'        => 'next time',
>>     ....
>>     ....
>>     };
>> 
>> How can i replace the spaces in keys with '_' without copying $self to
>> some other place.?
> 
> You can't modify the keys once they are created.  You would have to
> create a new key and copy the value to the new key.

(I noticed that, too.) But thanks to your tip I think I've created my first 
recursive sub-routine (only tested on this example). If it does what the OP 
requested (and y'all don't find too much wrong with it) then I'm a happy 
man!


pad_keys($self);
print Dumper(\$self);

sub pad_keys {
   my $ref = shift;
   if (ref $ref eq "HASH") {
      for my $value (%$ref) {
         if (ref $value eq "HASH") {
            pad_keys($value);
         }
      }
      for (keys %$ref) {
         my $old = $_;
         tr/ /_/;
         $ref->{$_} = $ref->{$old};
         delete $ref->{$old};
      }
   }
}

Dump...
$VAR1 = \{
            'see_ya' => 'next time',
            'fine_thank' => [
                              'you'
                            ],
            'hello_how' => {
                             'r_u' => 'I am'
                           }
          };

-K
-- 
Kevin Pfeiffer
International University Bremen

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to