Heute ging es im Forum von Perl-Community.de um das Finden der "größten" Zahl aus den Ergebnissen einer Datenbankabfrage. Das ganze sollte im Perl-Programm gelöst werden und nicht in der Abfrage (was ja mit "MAX()" sehr einfach gewesen wäre). Grob skizziert:
while ( hole_zeile_aus_ergebnis ) {
# mach was um groeszte Zahl zu finden
}
print groeszte_zahlMein Vorschlag war
my $max;
while ( @row = $dbh->fetchrow_array ) {
$max = $row[2] if not defined $max or $row[2] > $max; # in $row[2] stecken die Zahlen
}
print $max;
Tina kam dann mit einem Vorschlag
my $max = "-Infinity";
while ( @row = $dbh->fetchrow_array ) {
$max = $row[2] if $row[2] > $max;
}
Funktioniert wohl auf den meisten Systemen, aber eben nicht auf allen. Ich habe ein Windows mit Perl 5.8.9 und dort liefert das Ergebnis für die Zahlen -10, -20 und -1 nicht "-1" sondern es bleibt "-Infinity".
Warum?
Auf den meisten Systemen kann man "Unendlich" durch "Infinity" darstellen, dort wird auch "-1" ausgegeben. Bei anderen Systemen wird "Unendlich" aber anders dargestellt und hier wird "-Infinity" als String angesehen. Im numerischen Kontext wird daraus "0". Und "0" ist natürlich größer als die negativen Zahlen.
Also Vorsicht, wenn man "Unendlich" in einem Programm verwenden will, das auf allen möglichen Plattformen mit allen möglichen Konfigurationen läuft.
Übrigens...
In Perl 6 wird das einheitlich immer "Inf" bzw. "-Inf" sein.




