Ich will checken, ob eine Zahl größer ist als 20 und im Falle TRUE will ich diese dann speichern:
my $zahl = "20bla";
if ($zahl > 20) {
$gespeicherte_zahl = $zahl;
}
Aber nicht so:
Argument "20bla" isn't numeric in numeric gt (>) at ...
Du solltest dir die Warnungen anzeigen lassen.
> Das scheint aber ein Sicherheitsrisiko zu sein wenn man nämlich nur reine Zahlen haben will, wie ich.
> Obiges Beispiel ergibt nämlich TRUE, obwohl $zahl keine reine Zahl ist!
Da du offensichtlich die Warnungen ausgeschaltet hast, wandelt Perl wie jede andere Skriptsprache auch, den Wert in eine Zahl um, aber das obige Beispiel ist nicht wahr, du musst etwas falsch interpretiert haben.
~~~perl
#!/usr/bin/perl
my $zahl = "20bla";
if ($zahl > 20) {
print "true";
} else {
print "false";
}
ergibt 'false'. Denn die Zeichenkette "20bla" wird bei einem Zahlenvergleich zu 20.
#!/usr/bin/perl
my $zahl = "20bla";
if ($zahl == 20) {
print "true";
} else {
print "false";
}
Das sind Fallen, die dir bei jeder Skriptsprache über den Weg laufen, daher ist es empfehlenswert die Hilfen, die dir Perl anbietet zu nutzen, dazu gehrt auf jeden Fall use warnings (resp. -w)
Struppi.