Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Probleme mit $/ und STDIN





Frage

Ich bin Anfänger in Perl und während meiner ersten Schritte stellte sich ein Problem welches ich mir nicht erklären kann. Vieleicht kann mir einer von Euch helfen. Zum Problem: Nachfolgende findet Ihr den Sourcecode. 1 #!/usr/local/bin/perl -w 2 3 $i=0; 4 open(TEST,"grep A6 ./Tab1.txt |"); 5 #print <TEST>; 6 7 $/='\n'; 8 foreach $x (<TEST>) {$A[$i++]=$x} 9 close(TEST); 10 $b = @A; 11 print "$b\n"; 12 foreach $x (@A) {print "$x\n"} 13 14 print "Name:"; 15 $name = <STDIN>; 16 chomp($name); 17 printf("Hallo, %s !\n", $name); Das Problem hängt mit Zeile 7 zusammen. In der Form wie der Code dargestellt ist, läßt sich die Eingabe in Zeile 15 nur mit Ctlr-C abbrechen und die Ausgabe in Zeile 12 erfolgt mit einer zusätzlichen Leerzeile. Wird Zeile 7 auskommentiert, so endet die Eingabe (Zeile 15) mit RETURN und die Ausgabe (Zeile 12) erfolgt ohne zusätzliche Leerzeile. Dieses Verhalten kann ich mir nicht erklären. Für eine Antwort wäre ich dankbar. Vielen Dank Detlef

Antwort 1 von semi

Steuerzeichen wie \n \t usw. werden nur innerhalb von Zeichenketten interpretiert.
Betrachte dazu zuerst folgendes Beispiel:

#!/usr/local/bin/perl -w

print "length(\$\/)   = "  . length($/)   . "\n";
print "length(\"\\n\") = " . length("\n") . "\n";
print "length(\'\\n\') = " . length('\n') . "\n";
if($/ eq "\n") {
  print "\$\/ und \"\\n\" sind gleich.\n";
}
$a = '\n';
$b = "\n";
print "a = \"" . $a . "\"\n";
print "b = \"" . $b . "\"\n";

Wenn Du es ausführst, dann wirst Du merken, dass es einen großen Unterschied zwischen "\n" und '\n' gibt. (einfaches und doppeltes Anführungszeichen)
Beachte insbesondere die Länge und die Ausgabe der Variablen $a und $b.
'\n' wird als eine Folge der Zeichen \ und n interpretiert. "\n", wie erwartet, als Zeilenumbruch.
Standardmäßg ist die Variable $/ mit "\n" vorbelegt

Versuche mal in Deinem Beispiel folgendes als Namen einzugeben:

abc\n

und zwar exakt, wie es hier steht.
Mit \n meine ich nicht Zeilenumbruch sondern die Zeichen \ und n hintereinander.

Klartext:
"\n" ist Zeichenkette nur mit Zeilenumbruch
'\n' Zeichenfolge bestehend aus \ und n

Gruß,
Michael

Antwort 2 von dss

Hallo Michael,

vielen Dank für Deine prompte Antwort. Bei genauerem Hinsehen hätte ich es eigentlich selbst finden sollen.
Du hast mir aber noch mal klar gemacht den Unterschied zwischen „“ und ‚’.

Vielen Dank noch mal
Detlef


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: