PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl Anfängerproblem mit "==" bzw "eq"



poet
17-08-2002, 03:01
Angenommen ich schreibe folgenden Code (man beachte die == 0 stelle, die ich im zweiten Beispiel durch eq '0' ersetze) dann wird Zahl1 NIE angenommen. Angenommen ich ersetze das == durch ein "eq" so läuft alles problemlos. Kann mir jemand weiterhelfen? Verzeiht meine Anfängerfrage - ich habe erst mit Perl begonnen.

#!/usr/bin/perl -w

for ($count = 0; $count < 2; $count++) {
print "Bitte geben sie eine Zahl ein ";
chomp ($zahl = <STDIN>);
$array[$count] = ($zahl);
if ($array[0] < 0) {
print "Die eingegebene Zahl $zahl ist kleiner Null. Bitte eine positive Zahl angeben\n";
redo;}
if ($array[1] == '0' ) {
print "Die eingegebene Zahl darf nicht Null lauten!\n";
redo;}
}

print $array[0] / $array[1];
print "\n";

fork
17-08-2002, 06:27
a) Wenn Du den [ Code ] - Tag des Forums benutzt, dann sieht's gleich viel lesbarer aus!


#!/usr/bin/perl -w

for ( $count = 0 ; $count < 2 ; $count++ ) {
print "Bitte geben sie eine Zahl ein ";
chomp( $zahl = <STDIN> );
$array[$count] = ($zahl);
if ( $array[0] < 0 ) {
print
"Die eingegebene Zahl $zahl ist kleiner Null. Bitte eine positive Zahl angeben\n";
redo;
}
if ( $array[1] == '0' ) {
print "Die eingegebene Zahl darf nicht Null lauten!\n";
redo;
}
}

print $array[0] / $array[1];
print "\n";

b) Du willst also in beiden Schleifendurchgängen, in denen jeweils eine Variable eingegeben wird, jeweils beide Variablen prüfen? Das ist etwas unsinnig. Die komplette Schleife ist hier eigentlich recht überflüssig.

100.000 Euro Frage: Was passiert wenn Du im ersten Schleifendurchlauf die zweite noch nicht initialisierte Variable auf 0 überprüftst? ;-)

200.000 Euro Frage: Welchen Wert hat ein automatisch initialisierter String, oder warum funktioniert es mit dem Operator "eq" ?

poet
17-08-2002, 18:50
Ob dieser Code gut oder gar sinnvoll ist spielt keine Rolle. Es geht mir darum zu erfahren weswegen ich mit einem "eq" einen funktionsfähigen Code habe während ich bei einem "==" Fehlermeldungen erhalte.

fork
18-08-2002, 03:11
Beide Fragen habe ich Dir mit meinen "Fragen" beantwortet.

poet
20-08-2002, 07:37
Geb mir eine eindeutige Antwort. Ich bin nicht hier um muntere Spielchen zu treiben. Meine Frage ist eindeutig also erwarte ich auch eine vernünftige Antwort. In Fragen antworten ist doch absurd.

ComSubVie
20-08-2002, 13:19
aber wenn du über die fragen nachdenkst lernst du vielleicht mehr?

Was fork meint ist, das eq auf nicht initialisierte Strings rückischt nimmt, == behandelt diese wie wenn die bereits initialisiert wären. Naja, die Beschreibung passt zwar nicht allzu genau, aber ich denke es trifft den Kern der Sache. Falls nicht mich bitte auszubessern...

fork
20-08-2002, 15:20
> aber wenn du über die fragen nachdenkst lernst du vielleicht mehr?
Das ist genau der Punkt(darüber werde ich mich aber nicht mehr unterhalten)

>> Was passiert wenn Du im ersten Schleifendurchlauf die zweite noch nicht initialisierte Variable auf 0 überprüftst?

0 ist ein numerischer Wert. Eine nicht initialisierte Variable wird in einem numerischen Vergleich numerisch(Variable=0) initialisiert! Da 0 gleich 0 ist fällt der Vergleich immer erfolgreich aus.

>>Welchen Wert hat ein automatisch initialisierter String, oder warum funktioniert es mit dem Operator "eq" ?

"0" ist eine Zeichenfolge. Eine nicht initialisierte Variable wird in einem Zeichenkettenvergleich als Zeichenkette(Variable="") initialsiert. Da "" ungleich "0" ist schlägt der Vergleich immer fehl!