in reply to Using grep to remove array element from HoAoH leaving empty array-hash element

I don't think you're on the right track with the hash element not disappearing idea.

There are three possibilities:

1) $last is not defined. Easily verifiable with die("\$last is undef.\n") unless (defined($last));.

2) The key last is not found in %$_ for some element $_ of @{$bros->{$yr}}, as in the following structure:

$bros = { '1976' => [ { 'first' => 'Eric', # oops! no 'last'! }, } };

3) $_->{last} is not defined for some element $_ of @{$bros->{$yr}}, as in the following structure:

$bros = { '1976' => [ { 'first' => 'Eric', 'last' => undef, # oops! no value for 'last'! }, ], };

For (2) and (3), printing out $bros or @{$bros->{$yr}} with the help of Data::Dumper might help you locate the record with the missing 'last' or the one which has undef for value.

Replies are listed 'Best First'.
Re^2: Using grep to remove array element from HoAoH leaving empty array-hash element
by Popcorn Dave (Abbot) on Aug 11, 2004 at 05:10 UTC
    I think you're on to something with 2 and 3. Take a look at my reply and you'll see the Data::Dumper results. I'm getting an empty hash after the grep which appears to be appended to the end of the array. I think that is where grep is throwing the error, but I'm stumped on how to rectify that.

    Useless trivia: In the 2004 Las Vegas phone book there are approximately 28 pages of ads for massage, but almost 200 for lawyers.
      It's not the 'after' that's important. The warning is your grep condition telling you the data is wrong (i.e. different than expected) before grep is called. Data::Dumper shows us this bad data: the extra "{}" at the end of the list in the 'before' dump. What you must do now is figure out how that extra (fieldless) record is being added to your 'database'.