our @arrayAoH = ""; my $i = 0; # i holds the line number of the input (@discovered) array. my $j = 0; # j holds the number of the table row. my $key; my $value; # $# returns the subscript of the last element in the array. until ($i eq $#discovered){ if ($discovered[$i] =~ m/Item Number:/){ # parse this line containing labels and values until a blank line is found until ($discovered[$i] eq ""){ ($key, $value) = split /:\s*/, $discovered[$i]; ## $arrayAoH[$j] = { $key => $value }; $arrayAoH[$j]{$key} = $value; $i++; } # If the selected item shouldn't be processed, remove this array row. if (($arrayAoH[$j]{"Model Number"} !~ m/^Foo/)){ splice (@arrayAoH, $j, 1); } else { $j++; } } else { $i++;} }