in reply to Extending Array

$thing is a hash reference, not an array. See perldata and perlreftut for some more information.

Two ways to extend it:

$thing = { %$thing, 'C' => 'cutie', 'D' => 'pie' }; # OR $thing->{C} = 'cutie'; $thing->{D} = 'pie';

The first one generates a new hash and a new reference to it, the second adds items to the existing hash. Which one you should use depends on your use case (and is only relevant if there are other references to the same hash somewhere).

Replies are listed 'Best First'.
Re^2: Extending Array
by sriharsha.sm (Initiate) on Mar 21, 2012 at 18:53 UTC

    Why do you want to create a new hash? Just adding to the old hash ref won't work?

    Can you give a scenario where do you use 1st case?

      Can you give a scenario where do you use 1st case?

      If I write a subroutine that receives a hash reference as an argument, I wouldn't modify it in-place, because the caller might want to re-use it.

      Simplified example:

      # caller: my %h = (a => 1, b => 2); something(\%h); say $_ for keys %h; # callee sub something { my $arg = shift; $arg = { %arg, c => 3, d => 4, }; # do more stuff with $arg here }

      If you use $arg->{c} = 3 in sub something, %h changes in the caller's code, which is very likely to cause confusion.