2012-08-14 14 views
7

Mögliche Duplizieren:
Help me understand this Perl statement with <<'ESQ'Was ist Druck << EOF; und wie funktioniert es?

Was die Aussage in https://stackoverflow.com/questions/4151279/perl-print-eof genau tun? Ich bin auf den vorherigen Beitrag gestoßen, habe aber nicht verstanden, was er zu erklären versucht. Was ist das PETE? Kann jemand jede Zeile erklären? Wie funktioniert der Code?

print <<EOF; 
This is 
a multiline 
string 
EOF 

print <<PETE; 
This is 
a multiline 
string 
PETE 

Was ist der Unterschied und die Ähnlichkeit zwischen diesen beiden? Anstelle von PETE habe ich viele andere Wörter wie DOG verwendet und es funktioniert jedes Mal gleich.

Antwort

20

Dies wird ein Here-doc genannt. Es nimmt im Grunde genommen alles von der nächsten Zeile bis zu einer Endmarkierungslinie auf und präsentiert es als Standardeingabe für das laufende Programm. Die Endmarkierungslinie wird durch den Text nach der << gesteuert.

Als Beispiel in bash (was ich mit als Perl mehr vertraut bin), der Befehl:

cat <<EOF 
hello 
goodbye 
EOF 

wird cat laufen und dann zwei Linien auf seine Standardeingabe (die Hallo und auf Wiedersehen Linien schicken). Perl hat diese Funktion auch, obwohl die Syntax etwas anders ist (wie Sie es erwarten würden, da es eine andere Sprache ist). Trotzdem ist es nah genug, dass die Erklärung noch immer gültig ist.

Wikipedia hat an entry for this, die Sie wahrscheinlich gefunden hätten, wenn Sie gewusst hätten, dass es ein here-doc genannt wurde, aber andernfalls würde es ziemlich schwierig sein, es herauszufinden.

In Ihrem speziellen Fall besteht zwischen der Verwendung von EOF und PETE, gibt es eine Beziehung zwischen dem heredoc Marker (das Bit folgenden <<) und dem Ende der Standardeingabe kein Unterschied.

Zum Beispiel, wenn einer Ihrer Eingangsleitungen EOF war, konnte man nicht wirklich verwenden, die als Marker, da die Standardeingabe vorzeitig beendet werden würde:

cat <<EOF 
This section contains the line ... 
EOF 
but then has more stuff 
and this line following is the real ... 
EOF 

In diesem Fall könnten Sie PETE verwenden (oder irgendetwas anderes, das nicht im Text in einer eigenen Zeile erscheint).

Es gibt andere Optionen wie die Verwendung von Anführungszeichen um den Marker herum (damit der Einzug besser aussehen kann) und die Verwendung einfacher oder doppelter Anführungszeichen zur Steuerung der Variablensubstitution.

Wenn Sie auf die perlop Seite gehen und nach <<EOF suchen, wird es hoffentlich klar werden.

Verwandte Themen