use warnings ; use Data::Dumper; my %results = (); while ( ) { chomp ; my @row = split /,/, $_ ; print STDOUT "row values is:".$_."\n"; if ( (exists $results{ $row[0], $row1 })) { if ( ( $row2 ) < $results{ $row[0], $row1 }->{ 'ACTDATE' } ) { $results{ $row[0],$row1 }->{ 'ACTDATE' } = $row2 ; } print STDOUT "inactdate--".$row3." \n"; print STDOUT "in memory inact--".$results{ $row[0] }->{ 'INACTDATE' }."\n"; if ( ( defined $row3) && !( defined $results{ $row[0] }->{ 'INACTDATE' } ) ) { $results{ $row[0] }->{ 'INACTDATE' } = undef ; } elsif ( !( defined $row3) && ( defined $results{ $row[0] }->{ 'INACTDATE' } ) ) { $results{ $row[0] }->{ 'INACTDATE' } = undef ; } elsif( ( $row3 ) > ( $results{ $row[0], $row1 }->{ 'INACTDATE' } ) ) { $results{ $row[0], $row1 }->{ 'INACTDATE' } = $row3; } } else { # Create new entry in hash $results{ $row[0],$row1 } = { 'A1' => $row[0], 'B1' => $row1, 'ACTDATE' => $row2, 'INACTDATE' => $row3, } } } foreach ( sort keys %results ) { my $a1 = $results{ $_ }->{ 'A1' } ; my $b1 = $results{ $_ }->{ 'B1' } ; my $actDt = $results{ $_ }->{ 'ACTDATE' } ; my $inactDt = $results{ $_ }->{ 'INACTDATE' }; print "$a1,$b1,$actDt,$inactDt\n" ; } __DATA__ 7900724655,200906888,20180416,20180522 7900724655,200906889,20180724,20180728 7900724655,200906889,20180601,20180720 7900724655,200906888,20180730,20180830 7900724655,200906890,20180905,20180930 7900724655,200906890,20181005,20181030 7900724655,200906890,20181104, 7900724666,200906868,20180416,20180522 7900724666,200906869,20180601,20180720 7900724666,200906869,20180724,20180728 7900724666,200906868,20180730,20180830 7900724666,200906890,20180905,20180930 7900724666,200906890,20181005,20181030 7900724666,200906890,20181104, #### row values is:7900724655,200906888,20180416,20180522 row values is:7900724655,200906889,20180724,20180728 row values is:7900724655,200906889,20180601,20180720 inactdate--20180720 Use of uninitialized value in concatenation (.) or string at web_New_ADDON.pl line 16, line 3. in memory inact-- row values is:7900724655,200906888,20180730,20180830 inactdate--20180830 Use of uninitialized value in concatenation (.) or string at web_New_ADDON.pl line 16, line 4. in memory inact-- row values is:7900724655,200906890,20180905,20180930 row values is:7900724655,200906890,20181005,20181030 inactdate--20181030