Perl Array of Hashes Data Structure
		
		
		
		
		
		Jump to navigation
		Jump to search
		
		
	
A Perl Array of Hashes Data Structure is a Perl Array Data Structure whose Array Elements are composed of Perl Hash Data Structures.
- AKA: Perl Array of Hashes.
 - Context:
- It can be useful for Attribute-Value Data Records that need to be Sequential Access Task.
 
 - Example(s):
 - Counter-Example(s):
 - See: TABularDataFileMgmt Project.
 
References
2010
- (Melli, 2010) ⇒ Gabor Melli. (2010). “Perl Array of Hashes - Examples." GM-RKB ; Populate manually
 
- Manually define an array of hashes.
 
   my @file_attachments = (
       {file ⇒ 'test1.zip', price  ⇒ '10.00', desc  ⇒ 'the 1st test'},
       {file ⇒ 'test2.zip', price  ⇒ '12.00', desc  ⇒ 'the 2nd test'},
       {file ⇒ 'test3.zip', price  ⇒ '13.00', desc  ⇒ 'the 3rd test'},
       {file ⇒ 'test4.zip', price  ⇒ '14.00', desc  ⇒ 'the 4th test'}
  );
- Get the number of items (hashes) in the array.
 
my $file_no = scalar (@file_attachments); # $file_no is now: 4 in this instance as there is 4 hashes in the array.
- Loop through the hash and printing out all the hash "file" elements.
 
   for (my $i=0; $i < $file_no; $i++) {
      print '$file_attachments [$i]{'file'}  is:'. $file_attachments [$i]{'file'}."\n";
   }
- Loop through the hash and printing out all the hash "price" elements.
 
   for (my $i=0; $i < $file_no; $i++) {
      print '$file_attachments [$i]{'price'} is:'. $file_attachments [$i]{'price'}."\n";
   }
- Loop through the hash and printing out all the hash "desc" elements.
 
   for (my $i=0; $i < $file_no; $i++) {
      print '$file_attachments [$i]{'desc'} is:'. $file_attachments [$i]{'desc'}."\n";
   }
- Sample output of the looks above
 
$file_attachments [0]{'file'} is: test1.zip
$file_attachments [1]{'file'} is: test2.zip
$file_attachments [2]{'file'} is: test3.zip
$file_attachments [3]{'file'} is: test4.zip
$file_attachments [0]{'price'} is: 10.00
$file_attachments [1]{'price'} is: 12.00
$file_attachments [2]{'price'} is: 13.00
$file_attachments [3]{'price'} is: 14.00
$file_attachments [0]{'desc'} is: the 1st test
$file_attachments [1]{'desc'} is: the 2nd test
$file_attachments [2]{'desc'} is: the 3rd test
$file_attachments [3]{'desc'} is: the 4th test
@LoH = (
    {
       lead     ⇒ "fred",
       friend ⇒ "barney",
    },
    {
       lead    ⇒ "george",
       wife    ⇒ "jane",
       son     ⇒ "elroy",
    },
    {
       lead    ⇒ "homer",
       wife    ⇒ "marge",
       son     ⇒ "bart",
    },
  );
# reading from file
# format: lead=fred friend=barney
while (<> ) {
    $rec = {};
    for $field (split ) {
        ($key, $value) = split /=/, $field;
        $rec->{$key} = $value;
    }
    push @LoH, $rec;
}
# reading from file
# format: lead=fred friend=barney
# no temp
while (<> ) {
    push @LoH, { split /[\s=]+/ };
}
# calling a function that returns a key,value array, like
# "lead","fred","daughter","pebbles"
while (%fields = getnextpairset() ) {
    push @LoH, { %fields };
}
# likewise, but using no temp vars
while (<>) {
    push @LoH, { parsepairs($_) };
}
# add key/value to an element
$LoH[0]{pet} = "dino";
$LoH[2]{pet} = "santa's little helper";
# ACCESS AND PRINT
# one element
$LoH[0]{lead} = "fred";
# another element
$LoH[1]{lead} =~ s/(\w)/\u$1/;
# print the whole thing with refs
for $href (@LoH ) {
    print "{ ";
    for $role (keys %$href ) {
         print "$role=$href->{$role} ";
    }
    print "}\n";
}
# print the whole thing with indices
for $i (0 .. $#LoH ) {
    print "$i is { ";
    for $role (keys %{ $LoH[$i] } ) {
         print "$role=$LoH[$i]{$role} ";
    }
    print "}\n";
}
# print the whole thing one at a time
for $i (0 .. $#LoH ) {
    for $role (keys %{ $LoH[$i] } ) {
         print "element $i $role is $LoH[$i]{$role}\n";
    }
}
2001
- (Cross, 2001) ⇒ David Cross. (2001). “Data Munging with Perl.” Manning Publications. ISBN:1930110006