2012-08-14 21 views
7

Eventuali duplicati:
Help me understand this Perl statement with <<'ESQ'Che cos'è la stampa << EOF; e come funziona?

Qual è la dichiarazione in https://stackoverflow.com/questions/4151279/perl-print-eof facendo esattamente? Mi sono imbattuto nel post precedente ma non ho capito cosa sta cercando di spiegare. Che cos'è questo PETE? Qualcuno può spiegare ogni riga? Come sta funzionando il codice?

print <<EOF; 
This is 
a multiline 
string 
EOF 

print <<PETE; 
This is 
a multiline 
string 
PETE 

Qual è la differenza e la somiglianza tra questi due? Al posto di PETE ho usato molte altre parole come DOG e funziona sempre lo stesso.

risposta

20

Questo è chiamato un here-doc. Praticamente prende tutto dalla prossima linea fino a una linea di marker di fine e lo presenta come input standard per il programma che stai utilizzando. La linea del marcatore finale è controllata dal testo che segue lo <<.

A titolo di esempio, in bash (che sono più familiarità con di Perl), il comando:

cat <<EOF 
hello 
goodbye 
EOF 

verrà eseguito cat e quindi inviare due righe al suo standard input (il ciao e arrivederci linee). Anche Perl ha questa caratteristica sebbene la sintassi sia leggermente diversa (come ci si aspetterebbe, dato che è una lingua diversa). Tuttavia, è abbastanza vicino perché la spiegazione sia ancora valida.

Wikipedia ha an entry for this che probabilmente avresti trovato se avessi saputo che si chiamava un here-doc, ma altrimenti sarebbe piuttosto difficile capirlo.

Nei tuoi casi particolari, non v'è alcuna differenza tra l'utilizzo EOF e PETE, c'è una relazione tra il marcatore heredoc (il bit seguente <<) e la fine del standard input.

Per esempio, se una delle linee di ingresso era EOF, non si poteva davvero usare che come un indicatore in quanto lo standard input sarebbe terminato prematuramente:

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

In tal caso, è possibile utilizzare PETE (o qualsiasi altra cosa che non appare nel testo sulla sua stessa riga).

Ci sono altre opzioni come usare le virgolette attorno al marcatore (in modo che il rientro possa apparire migliore) e l'uso di virgolette singole o doppie per controllare la sostituzione delle variabili.

Se si passa alla pagina perlop e si cerca <<EOF, si spera che tutto diventi chiaro.

Problemi correlati