in reply to Updating hash using it's reference ...

It certainly is. For instance, the first element in your array is $array[0]; since this is a hash reference, you can deference it and turn it into a proper hash again by saying %{ $array[0] } (the whitespace isn't necessary; it just improves readability). And since that's just a hash, you can access its elements as usual, e.g. ${ $array[0] }{'somekey'}.

That last bit of syntax is clunky, of course, so Perl provides the -> postfix operator for dereferencing and element access as well; using that, you can also write $array[0]->{'somekey'}, which is much more readable and makes it more obvious what's going on.

Example:

#!/usr/bin/perl use feature qw/say/; use warnings; use strict; my @array = ( { 'Fred' => 'Flintstone', 'Barney' => 'Rubble' } ); say $array[0]; say %{ $array[0] }; say ${ $array[0] }{'Fred'}; say $array[0]->{'Fred'}; $array[0]->{'Betty'} = 'Rubble'; say $array[0]->{'Betty'};

Output:

$ perl test.pl HASH(0x8002bc80) BarneyRubbleFredFlintstone Flintstone Flintstone Rubble $

EDIT: removed superfluous use Data::Dumper; -- good catch, hexcoder. :)

Replies are listed 'Best First'.
Re^2: Updating hash using it's reference ...
by AnomalousMonk (Archbishop) on Jul 12, 2014 at 13:18 UTC
    That last bit of syntax is clunky ... the -> postfix operator for dereferencing and element access as well ...

    And for even less clunky syntax, Perl understands that any array/hash/code/etc. reference below the topmost level can only be a reference, so it will use the  -> operator implicitly if you do not use it explicitly. It's only at the topmost level that you have to supply a  -> or not based on the nature of the variable you are accessing:  -> must be used with an array/hash/code reference: see Anonymonk's reply for an example of this.

    c:\@Work\Perl>perl -wMstrict -le "use feature qw/say/; use Data::Dump; ;; my @array = ( { 'Fred' => 'Flintstone', 'Barney' => 'Rubble', } ); ;; say $array[0]{'Fred'}; ;; $array[0]{'Marge'} = 'Simpson'; say $array[0]{'Marge'}; ;; dd \@array; " Flintstone Simpson [ { Barney => "Rubble", Fred => "Flintstone", Marge => "Simpson" }, ]

    See also perldsc (Perl Data Structures Cookbook).

      Ah, I didn't know that! Thanks for the tip, my enlightened brother!
      I would discourage not using the postfix dereferencing, it's the first clue that something is a reference! It matters because modifying references can have side effects on the thing that is referenced!