c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my $string = 'Return code is'; ;; my %errors; for my $row ( qq{2015/04/06 12:38:15 (9):(5564) Return code is :55\n\r\n}, qq{2015/04/06 12:38:15 (9):(6600) Return code is :55 \r\n\r}, qq{2015/04/06 12:41:31 (9):(3604) Return code is :1\t\n\r}, ) { ++$errors{$1} if $row =~ m{ \Q$string\E \s* : (\d+) \s* \z }xms; } dd \%errors; ;; my $total; for my $err_no (sort { $a <=> $b } keys %errors) { print qq{error $err_no - $errors{$err_no} total}; $total += $errors{$err_no}; } print qq{total errors: $total}; " { 1 => 1, 55 => 2 } error 1 - 1 total error 55 - 2 total total errors: 3