2016-05-23 8 views
0

iam mit Perl, um einige Daten zu drucken, aber es gibt mir Fehler als kann nicht String-Terminator "EOF" überall vor EOF beiFehler in Perl kann nicht gefunden werden Zeichenfolge Terminator "EOF" irgendwo vor EOF bei /var/www/sandeep/testeof.cgi Zeile 2

Der Code zu finden ist:

#!/usr/local/bin/perl -w 
print <<EOF; 
hello 
EOF 

ERROR:

[Mon May 23 11:32:12 2016] [error] [client 192.168.10.117] Directory index forbidden by Options directive: /var/www/, referer: http://192.168.10.100/ [Mon May 23 11:32:12 2016] [error] [client 192.168.10.117] malformed header from script. Bad header=hello: testeof.cgi [Mon May 23 11:32:18 2016] [error] [client 192.168.10.117] Directory index forbidden by Options directive: /var/www/, referer: http://192.168.10.100/ [Mon May 23 11:32:18 2016] [error] [client 192.168.10.117] Can't find string terminator "EOF" anywhere before EOF at /var/www/sandeep/testeof.cgi line 2. [Mon May 23 11:32:18 2016] [error] [client 192.168.10.117] Premature end of script headers: testeof.cgi

Ich habe versucht, EOF in einfache Anführungszeichen setzen (Drucken < < 'EOF';) wie in this answer gezeigt, aber der Fehler ist der gleiche. Drucken mit dieser Methode funktioniert in anderen Dateien im selben Verzeichnis.
Ich erwähnte auch this question (Why am I getting “Can't find string terminator ”'“ anywhere before EOF at -e line 1” when I try to run a Perl one-liner on Windows?), aber in dieser Frage OP verwendet andere Methode zum Drucken und iam mit Linux (UBUNTU).

Bitte führen Sie, wo ich falsch mache?

+1

Ich habe nicht diesen Fehler, wenn Ihr Code ausgeführt wird. Geben Sie ein minimales Beispiel an, das den Fehler tatsächlich verursacht. – Henrik

+1

Versuchen Sie, eine Endzeile nach dem EOF hinzuzufügen. –

Antwort

1

Ihr Code ist korrekt.

Stellen Sie sicher, dass sich Ihr EOF in einer einzelnen Zeile ohne Leerzeichen befindet.

Verwenden Sie Ihre Terminator zitiert zu bezeichnen:

print <<_EOF_; 
hi $$ 
_EOF_ 

print <<"_EOF_"; 
hi $$ 
_EOF_ 

Beide genau gleich sind (drucken hi 12345 wo 12345 die Prozess-ID des aktuellen Prozesses ist), aber der zweite ist deutlich im Vergleich zu einfachen Anführungszeichen:

print <<'_EOF_'; 
hi $$ 
_EOF_ 

wird dies eine hi $$ drucken, weil keine Variable mit Single Anführungszeichen erfolgt ersetzen.

Web-Skript erfordert immer einen Header (zumindest für Apache). Fügen Sie diese Zeile als die erste Zeile Ausgabe des malformed header from script Fehler loszuwerden:

print "Content-type: text/html\r\n\r\n";