in reply to Re: Extract the common values in hash of array with double keys
in thread Extract the common values in hash of array with double keys

delete won't work as it will give me a run time error that the free space is being encountered after deleting the element during iteration

  • Comment on Re^2: Extract the common values in hash of array with double keys

Replies are listed 'Best First'.
Re^3: Extract the common values in hash of array with double keys
by jethro (Monsignor) on Feb 04, 2010 at 20:38 UTC
    You have to change the line to:
    delete $data{$key2}{$sum2};

    UPDATE: Oops, I think I misunderstood your problem. You might include a check for existence before you access an array value in the loop

    if (exists $data{$key1}{$sum1}) { ... # and later if (exists $data{$key2}{$sum2}) { ... # or next if (not exists $data{$key2}{$sum2});

    You might even avoid one of the exists-lines if you don't delete the second item (i.e. $data{$key2}{$sum2}) but the original item (i.e. $data{$key1}{$sum1}) and exit the inner loops immediately. If a third identical item is there it will be detected when the second item later becomes an original item. Since you never delete an item that $key1 and $sum1 might encounter later on, you don't need to test $data{$key1}{$sum1} for existence.

    Whether your code is correct I can't easily judge (without investing a lot more time). Maybe you should extract your algorithm to a subroutine and the comparision of the two arrays to another subroutine, that would make your program much more readable and testable. Then write some test cases and compare the expected result with what you really get