use warnings; use strict; my $string = "Return code is"; my %errors; while (){ ++$errors{$1} if /\Q$string\E \s* : \s* (\d+) $ /x; } while (my ($k, $v) = each %errors){ print "$k: $v\n"; } __DATA__ 2015/04/06 12:38:15 (9):(5564) Return code is :55 2015/04/06 12:38:15 (9):(6600) Return code is :55 2015/04/06 12:41:31 (9):(3604) Return code is :1 #### 1: 1 55: 2