2012-08-14 29 views
7

Duplicar posible:
Help me understand this Perl statement with <<'ESQ'¿Qué es impresión << EOF; y como esta funcionando?

¿Cuál es la declaración en https://stackoverflow.com/questions/4151279/perl-print-eof haciendo exactamente? Me encontré con la publicación anterior pero no entendí lo que está tratando de explicar. ¿Qué es eso PETE? ¿Alguien puede explicar cada línea? ¿Cómo está funcionando el código?

print <<EOF; 
This is 
a multiline 
string 
EOF 

print <<PETE; 
This is 
a multiline 
string 
PETE 

¿Cuál es la diferencia y similitud entre estos dos? En lugar de PETE he usado muchas otras palabras como DOG y funciona igual siempre.

Respuesta

20

Esto se llama here-doc. Básicamente toma todo de la siguiente línea hasta una línea de marcador final y lo presenta como entrada estándar al programa que está ejecutando. La línea de marcador final está controlada por el texto que sigue al <<.

A modo de ejemplo, en bash (que estoy más familiarizado con que Perl), el comando:

cat <<EOF 
hello 
goodbye 
EOF 

se ejecutará cat y luego enviar dos líneas a su entrada estándar (el hola y adiós líneas) Perl también tiene esta característica aunque la sintaxis es ligeramente diferente (como era de esperar, dado que es un idioma diferente). Aún así, está lo suficientemente cerca para que la explicación aún se mantenga.

Wikipedia tiene an entry for this que probablemente hubieras encontrado si hubieras sabido que se llamaba aquí-doc, pero de lo contrario sería bastante difícil de resolver.

En sus casos particulares, no hay diferencia entre el uso de EOF y PETE, hay una relación entre el marcador heredoc (el bit siguiente <<) y el extremo de entrada estándar.

Por ejemplo, si uno de sus líneas de entrada fue EOF, que no podía realmente usar eso como un marcador desde la entrada estándar se daría por terminado antes de tiempo:

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

En ese caso, podría utilizar PETE (o cualquier otra cosa que no aparezca en el texto en su propia línea).

Existen otras opciones, como utilizar comillas alrededor del marcador (para que la sangría se vea mejor) y el uso de comillas simples o dobles para controlar la sustitución de variables.

Si va a la página perlop y busca <<EOF, es de esperar que todo quede claro.

Cuestiones relacionadas