Thread unverständnis zu sprintf
(22 answers)
Opened by also at 2010-08-13 21:19
Perl unterscheidet nicht nach Datentypen (numerisch/String) wie andere Sprachen.
Entscheidend ist der Kontext in dem die Variable steht, dementsprechend wird die Variable ausgewertet. Steht sie im numerischen Kontext ( wie beim == Operator) wird der Inhalt numerisch ausgewertet; enthaelt die Variable keinen numerischen Wert, wird versucht, diesen numerisch zu interpretieren; im Zweifelsfall wird 0 verwendet. Steht zu Begin des Strings eine Zahl, wird diese im numerischen Kontext ausgewertet; ansonsten 0. Code: (dl
)
1 for my $str ( "str", "4str", "1.5str" ) { Wenn Warnungen eingeschaltet sind, dann warnt der Interpreter davor, dass ein nicht-numerischer Wert in einem numerischen Kontext verwendet wird: Code: (dl
)
Argument "str" isn't numeric in numeric eq (==) at -e line 1. Diese "Eigenartigkeit" kannst Du ändern, indem Du vor dem numerischen Kontext überprüfst, ob Deine Variable wirklich einen numerischen Wert enthält. Eine Variante wäre sowas (Test auf integer): Code: (dl
)
1 if ( $var =~ m/\A[+-]?\d+\z/ ) { # $var is integer meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |