Hello Mallik,
you asked:
> I want to accomplish some thing like this...
>
> %hash = (
> "abc" => "mallik",
> "xyz" => "arjun",
> "mno" => "priya"
> );
>
> Need be changed to
>
> %hash = (
> "123" => "mallik",
> "243" => "arjun",
> "532" => "priya"
> );
>
> The key value abc is changed to 123 and so on..
>
> Hope my requirements are clear now.
If your new keys don't overlap with the old ones, you could
do it like this:
# set up a key mapping
my %mapping = ( 'abc' => '123', 'xyz' => '243', 'mno' => '532' );
my %hash = (
"abc" => "mallik",
"xyz" => "arjun",
"mno" => "priya"
);
# not recommended for large hashes, but syntactically elegant
@hash{values %mapping} = @hash{keys %mapping};
delete @hash{keys %mapping};
# slightly less attractive code with a low memory overhead
foreach my $key ( keys %mapping ){
$hash{$mapping{$key}} = $hash{$key};
delete $hash{$key};
}
If keys worked like substr, you might've gotten away with
keys %hash = @mapping{keys %hash};
Alas, it doesn't.
Doing the same operation for overlapping key sets is left as an
exercise for the reader ;-)
HTH,
Thomas
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>