Hallo,
ich weis nicht warum, aber es gelingt mir einfach nicht einen Hash nach den Werten anstatt den Schlüsseln zu sortieren.
Das folgende kleine Script erzeugt eine Vielposterstatistik meines Boards, wobei der der am Meisten postet ganz oben stehen soll.
Das Script funktioniert tadellos, wenn ich nach den Schlüssel sortiere.
foreach (sort {$a cmp $b} keys %namen) {
print "$_ : $namen{$_}<br>\n";
}
Will ich aber nach den Werten sortieren zB :
foreach (sort {$a <=> $b} values %namen) {
print "$_ : $namen{$_}<br>\n";
}
bekomme ich einen "use of uninitialized value .." in der Zeile :
print "$_ : $namen{$_}<br>\n";
Der Schlüssel ist auf jeden Fall eine Zahl, hier das Script :
#!/usr/bin/perl -w
use strict;
my %namen = ();
opendir (DIR,'messages') or die "Cant open 'messages' : $!\n";
while (defined($_ = readdir DIR)) {
if ($_ =~ /^\d+?.cgi$/) {
open (FILE,"messages/$_") or die "Cant open $_ : $!\n";
local $/;
my $inhalt = <FILE>;
while ($inhalt =~ /<name>(.+?)</name>/sg) {
my $name = $1;
if (exists $namen{$name}) {
$namen{$name}++;
} else {
$namen{$name} = 1;
}
}
close FILE;
}
}
closedir DIR;
print "Content-type:text/html\n\n";
foreach (sort {$a <=> $b} values %namen) {
print "$_ : $namen{$_}<br>\n";