Your code does not even compile. Moreover, the logic with @list is wrong: you should keep all the information in the hash, not just the count. Like this:
#!/usr/bin/perl
use warnings;
use strict;
my %error_count;
while (<DATA>) {
if (my ($error) = m/\](.*)\(20/) {
$error_count{$error}{count}++;
$error_count{$1}{list} //= [split /\s+/]; # Only remembers th
+e first time.
}
}
for (keys %error_count) {
my @list = @{ $error_count{$_}{list} };
print "DEVICE\t--> $list[3]\n";
print "DATE\t--> $list[0] $list[1]\n";
print "TIME\t--> $list[2]\n";
print "ERROR\t--> $_\n";
print "\nThe above error occurred $error_count{$_}{count} times\n"
+;
}
__DATA__
Oct 17 10:35:39 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:39)
Oct 17 10:35:40 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:40)
Oct 17 10:35:41 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:41)
Oct 17 10:35:42 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:42)
Oct 17 10:35:43 esw001tff2 [Root]Server reset. Occurred 1 time. (2012
+17 10:35:43)
Oct 17 10:35:44 esw001tff2 [Root]Server reset. Occurred 1 time. (2012
+17 10:35:44)
Oct 17 10:35:45 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:45)
Oct 17 10:35:46 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:46)
Oct 17 10:35:47 esw001tff2 [Root]Root login failure! Occurred 1 time.
+(2012 17 10:35:47)
Oct 17 10:35:48 esw001tff2 [Root]Root login failure! Occurred 1 time.
+(2012 17 10:35:48)
Oct 17 10:35:49 esw001tff2 [Root]Root login failure! Occurred 1 time.
+(2012 17 10:35:49)
Oct 17 10:35:50 esw001tff2 [Root]IP Spoofing from 255.255.255.255 to 2
+55.255.255.255! Occurred 1 time. (2012 17 10:35:50)