Aber wenn es um das Zählen der ununterbrochenen Tage geht, kannst Du das so machen:
#!/usr/bin/perl -wuse strict;
my %dates;
my %users;
my %count;
while (<DATA>) {
chomp;
my($date, $user) = split(/\s/);
# Datum mit allen Usern
$dates{$date}{$user}++;
# Lookup Table fuer User
$users{$user}++;
}
# Durch die Liste der User gehen
foreach my $user (keys %users) {
# den Wert 0 als Startwert in Array legen
push(@{$count{$user}}, 0);
# jedes Datum abklappern
foreach my $date (sort keys %dates) {
# Der User war an diesem Tag da
if ( $dates{$date}{$user} ) {
# deshalb den letzten Wert um 1 erhhen
$count{$user}[-1]++;
}
else {
# neuen Startwert setzen (push 0)
push(@{$count{$user}}, 0);
}
}
}
# den hoechsten Wert raussuchen und zuweisen
$count{$_} = (sort {$b <=> $a} @{$count{$_}})[0] for keys %count;
# sortiert nach Laenge ausgeben
print map {"$_ war $count{$_} mal am Stueck da\n" } sort {$count{$b} <=> $count{$a}} keys %count;
__DATA__
20051123 user1
20051123 user2
20051123 user3
20051123 user4
20051122 user1
20051122 user3
20051122 user4
20051121 user2
20051121 user4
__END__
Gibt Folgendes aus:
user4 war 3 mal am Stueck da
user1 war 2 mal am Stueck da
user3 war 2 mal am Stueck da
user2 war 1 mal am Stueck da