foreach my $paymentRow ( @$payments ) { foreach my $salesKey ( keys %$sale_items ) { ### make sure we're applying the right line items ... next if ( $paymentRow->{creditacct} != $sale_items->{$salesKey}{debitacct} ); ## if payment can be applied, ## apply it and delete the row from payments/credits array warn "DELETING ... {$salesKey} " if ( $paymentRow->{amount} == $sale_items->{$salesKey}{amount} and $paymentRow->{ppid} == $sale_items->{$salesKey}{ppid} ); delete $sale_items->{$salesKey} <---- DELETED and undef( $paymentRow ) if ( $paymentRow->{amount} == $sale_items->{$salesKey}{amount} and $paymentRow->{ppid} == $sale_items->{$salesKey}{ppid} ); $sale_items->{$salesKey}{amount} -= $paymentRow->{amount} and undef( $paymentRow ) if ( $paymentRow->{amount} < $sale_items->{$salesKey}{amount} <---- AUTOVIVI and $paymentRow->{ppid} == $sale_items->{$salesKey}{ppid} ); } } #### $salesKey = 'key'; $sales_items = { $salesKey => {} }; delete $sale_items->{$salesKey}; print("[", keys(%$sale_items), "]\n"); # [] doodah() if ( $paymentRow->{amount} < $sale_items->{$salesKey}{amount}); print("[", keys(%$sale_items), "]\n"); # [key] #### delete $sale_items->{$salesKey} and undef( $paymentRow ) if ( $paymentRow->{amount} == $sale_items->{$salesKey}{amount} and $paymentRow->{ppid} == $sale_items->{$salesKey}{ppid} ); #### do { delete $sale_items->{$salesKey}; undef( $paymentRow ); next; } if ( $paymentRow->{amount} == $sale_items->{$salesKey}{amount} and $paymentRow->{ppid} == $sale_items->{$salesKey}{ppid} );