2010-01-08 3 views
5

Ich beginne gerade Perl zu lernen. Ich schaute auf die beginning perl page und begann zu arbeiten.Was ist der Unterschied zwischen einfachen und doppelten Anführungszeichen in Perl?

Dort heißt es:

Der Unterschied zwischen einfachen Anführungszeichen und doppelten Anführungszeichen ist, dass einfache Anführungszeichen bedeuten, dass ihr Inhalt wörtlich genommen werden sollte, während doppelte Anführungszeichen bedeuten, dass deren Inhalte

interpretiert werden sollte

Als ich dieses Programm ausführen:

#!/usr/local/bin/perl 
print "This string \n shows up on two lines."; 
print 'This string \n shows up on only one.'; 

Es gibt:

 
This string 
shows up on two lines. 
This string 
shows up on only one. 

Bin ich irgendwo falsch? die Version von Perl unter:

perl -v 

This is perl, v5.8.5 built for aix 

Copyright 1987-2004, Larry Wall 

Perl may be copied only under the terms of either the Artistic License or the 
GNU General Public License, which may be found in the Perl 5 source kit. 

Complete documentation for Perl, including FAQ lists, should be found on 
this system using `man perl' or `perldoc perl'. If you have access to the 
Internet, point your browser at http://www.perl.com/, the Perl Home Page. 
+1

Bitte geben informative Titel auf Ihre Fragen, in diesem Fall „Wie funktioniert String-Interpolation in Perl mit verschiedenen Kursart?“. Dies hilft den richtigen Leuten, Ihre Frage zu sehen und zu beantworten. –

+3

"ein Zweifel in Perl": Schrecklicher Titel! Ich werde es zu etwas Sinnvollem bearbeiten. –

+6

Ich kann Ihr Problem nicht replizieren. Der zweite Druck erscheint für mich in einer Zeile, wie ich es erwarte. Bitte geben Sie weitere Informationen an: Welches Betriebssystem und welche Version von Perl verwenden Sie? Zeige die Ausgabe von: perl -v – toolic

Antwort

15

Ich bin geneigt zu sagen, dass etwas mit deiner Shell/dem Terminal los ist, und was immer du ausgibst, interpretiert das \ n als Newline und das Problem ist nicht mit Perl.

bestätigen: Das sollte nicht passieren (TM) - im ersten Fall würde ich erwarten, eine neue Zeile eingefügt, aber mit einfachen Anführungszeichen zu sehen, sollte es Ausgabe buchstäblich die Zeichen \ n und nicht ein zu Neue Zeile.

1

Mit „interpretiert“, meinen sie, dass Variablennamen und solche werden nicht gedruckt, sondern ihre Werte statt. \ n ist eine Escape-Sequenz, also würde ich denken, dass sie nicht interpretiert wird.

4

In Perl erweitern Strings in einfachen Anführungszeichen Backslash-Escapes wie \n oder \t nicht. Der Grund, warum Sie sie erweitert sehen, liegt wahrscheinlich an der Art der Shell, die Sie verwenden, was Ihre Ausgabe aus irgendeinem Grund verändert.

+0

Sie machen auch keine variable Interpolation ("foo is $ bar") – amphetamachine

3

Alles, was Sie über Zitate und zitatähnliche Operatoren wissen müssen, ist in perlop.

Um Ihre spezifische Frage zu beantworten, können doppelte Anführungszeichen bestimmte Folgen von literalen Zeichen in andere Zeichen umwandeln. In Ihrem Beispiel wird durch die doppelten Anführungszeichen die Zeichenfolge \ und n in ein einzelnes Zeichen umgewandelt, das eine neue Zeile darstellt. In einer Zeichenfolge in Anführungszeichen ist dieselbe literale Sequenz nur die Zeichen \ und n.

1

Zusätzlich zu Ihrer O'Reilly-Verknüpfung, eine nicht weniger autoritative Referenz als die "Programming Perl" -Buch von Larry Wall, besagt, dass Backslash-Interpolation nicht in Strings in einfachen Anführungszeichen auftritt.

... much like Unix shell quotes: double quoted string literals are subject to 
backslash and variable interpolation; single quoted strings are not 
(except for \' and \\, so that you may ...) 

Programing Perl, 2nd ed, 1996 page 16 

So wäre es interessant, zu sehen, was Ihr Perl tut mit
print 'Doppel Backslash n: \\ n';

Wie oben, bitte zeigen Sie uns die Ausgabe von 'perl -v'.

Und ich glaube, ich habe die Forum-Editor-Software verwirrt, weil das letzte Perl 'print' eingerückt hätte.

+0

wenn ich als Ausdruck '\\ n' schreibe; Dies gibt '\ n' aus – Vijay

1

Wenn Sie das doppelte Anführungszeichen verwenden, wird das \ n als Zeilenumbruch interpretiert.

Aber wenn Sie das Apostroph verwenden es wird die \ n als Newline nicht interpretiert.

Für mich funktioniert es richtig.

Dateiinhalt

print "This string \n shows up on two lines."; 
print 'This string \n shows up on only one.' 
Verwandte Themen