Array ref:
0
1
2
3
4

Hash ref:
a=>aval
b=>bval

Array of hashrefs: pitfall: same ref: will print just last val because we use same ref
HASHref:a_val3,b_val3
HASHref:a_val3,b_val3
HASHref:a_val3,b_val3
HASHref:a_val3,b_val3

Array of hashrefs : And that's how it should be done:
HASHref:a_val0,b_val0
HASHref:a_val1,b_val1
HASHref:a_val2,b_val2
HASHref:a_val3,b_val3

Data::Dumper is convenient way to "unpack" complex structures :
$VAR1 = [ { 'a' => 'a_val0', 'b' => 'b_val0' }, { 'a' => 'a_val1', 'b' => 'b_val1' }, { 'a' => 'a_val2', 'b' => 'b_val2' }, { 'a' => 'a_val3', 'b' => 'b_val3' } ];

And this is how we would access elements referenced by arrayref manually:
0: a => a_val0 : b => b_val0
1: a => a_val1 : b => b_val1
2: a => a_val2 : b => b_val2
3: a => a_val3 : b => b_val3