in reply to Accessing a hash element

You keep posting examples with completely broken and unusable data, which makes it nearly impossible to figure out what and why you're trying to do.

Here's what I expect you're trying to do, but it's really a crap shoot here:

use warnings; use strict; my $aref = [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, { BIRTH => "11/04/2014", CODE => 4, NAME => "Mike D.", NUMBER => 1234, }, ]; for my $block (@$aref){ my $number = $block->{NUMBER}; print "$number\n"; }

Why don't you state your overall objectives for the larger project, instead of repeated posts with code that won't compile and data that can't be used? Then, we might be able to give examples of long-term data structure, and how to use it.

Update: if you do have an aoaoh, here's an example of how to get the NUMBER from the 1st hash in the 2nd array element:

use warnings; use strict; my $arefs = [ [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "Mike D", NUMBER => 5555, }, ], ]; print "$arefs->[1][0]{NUMBER}\n";

Replies are listed 'Best First'.
Re^2: Accessing a hash element
by Anonymous Monk on Nov 03, 2015 at 20:28 UTC
    Hi, how could I remove a duplicated block from the same data structure?
    use warnings; use strict; my $arefs = [ [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "Mike D", NUMBER => 5555, }, ], ];

    Thanks!

      Data::Compare can do this. Here's one way:

      use warnings; use strict; use Data::Compare; use Data::Dumper; my $arefs = [ [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, ], [ { BIRTH => "11/04/2014", CODE => 4, NAME => "Mike D", NUMBER => 5555, }, ], ]; my $no_dups_aref; while (my $aref = shift @$arefs){ my $dup = 0; for (@$arefs){ $dup = Compare($aref, $_); last if $dup; } next if $dup; push @$no_dups_aref, $aref; } print Dumper @$no_dups_aref;

      However, I'd be seriously inclined to change your data structure. There's no need to have nested arrays if all you have in each one only has a single hash. I'd dumb it down to a simple AoH:

      use warnings; use strict; use Data::Compare; use Data::Dumper; my $hrefs = [ { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, { BIRTH => "11/04/2014", CODE => 4, NAME => "JOHN D.", NUMBER => 1234, }, { BIRTH => "11/04/2014", CODE => 4, NAME => "Mike D", NUMBER => 5555, }, ]; my $no_dups_aref; while (my $href = shift @$hrefs){ my $dup = 0; for (@$hrefs){ $dup = Compare($href, $_); last if $dup; } next if $dup; push @$no_dups_aref, $href; } print Dumper @$no_dups_aref;