# $logfilename being defined previously.... my (%errors); open(LOGFILE, $logfilename) or die(qq{Can't open $logfilename for input: $!\n}); while (my $line = ) { # example format: mon day time server program[pid]: message my @lineparts = split(/\s+/, $line, 6); if ($lineparts[5] =~ m/^Error:/) { $errors{$lineparts[5]}{count}++; push(@{$errors{$lineparts[5]}{linenumber}}, $.); } } close(LOGFILE); #### print qq{ERROR REPORT\n\n}, qq{Error message\tOccurrances\n\tLines found on\n\n}; foreach my $k (sort keys %errors) { print $k, qq{\t}, $errors{$k}{count}, qq{\n}, qq{\t}, join(q{,}, @{$errors{$k}{linenumber}}), qq{\n}; } #### ERROR REPORT Error message Occurrances Lines found on Error msg 1 1 13 Error msg 8675309 5 3,7,21,55,82