use Data::Dumper; my %results = (); while ( ) { chomp; my @row = split /,/, $_; print STDOUT "row values is:".$_."\n"; if ( (exists $results{ $row[0], $row[1] })) { if ( ( $row[2] ) < $results{ $row[0], $row[1] }->{ 'ACTDATE' } ) { $results{ $row[0],$row[1] }->{ 'ACTDATE' } = $row[2] ; } print STDOUT "inactdate--".$row[3]." \n"; print STDOUT "in memory inact--".$results{ $row[0] }->{ 'INACTDATE' }."\n"; if ( ( defined $row[3]) && !( defined $results{ $row[0] }->{ 'INACTDATE' } ) ) { $results{ $row[0] }->{ 'INACTDATE' } = undef ; }