2010-10-29 4 views
9

Warum bekomme ich diesen Fehler?Kann den String-Terminator "str" ​​nirgendwo vor EOF finden

use strict; 
use warnings; 

my $str = <<str; 
88087 23/11/2010 
35192 25/07/2010 
B3J 5X9 17/08/2011 
C8U 5L6 16/08/2011 
F4Q 3B4 17/10/2010 
D3X 9P4 11/05/2010 
O7L 6Z8 28/02/2010 
W8L 9P2 05/09/2010 
str 

print $str; 

my @arr = split/\n/,$str; 
foreach (@arr) { 
     my @tmp = split/\t/; 
     print "$tmp[1]\n"; 
} 

Antwort

24

Sie sollten keinen Raum hier haben:

str 
^

Der heredoc Terminator sollte sich auf einer Linie sein und nicht etwas (nicht einmal Raum) umgibt, es sollte.

+1

Darf ich empfehlen Menschen konfigurieren ihre Editor anzuzeigen Leerzeichen am Ende der Linie, da sie zu kontrollieren hilft diese Art von nicht gefunden Bugs – mfontani

+0

Nicht dred heredocs. Es ist ganz wunderbar. – tchrist

1

Oder besser Verwenden Sie Eclipse Perl Integration Plug-In oder Padre zum Bearbeiten Ihres Perl-Codes. Es zeigt Syntaxfehler in Echtzeit.

1

können Sie diagnostics verwenden ausführlichere Hilfe auf Warnmeldungen zu erhalten:

nicht String-Terminator "str" ​​gefunden überall vor EOF (F) Perl Strings über mehrere Zeilen erstrecken sich über können. Diese Nachricht bedeutet , dass der schließende Begrenzer weggelassen wurde. Da klammert Zitate Zählung Schachtelungsebenen, nach dem seine endgültige Klammer fehlt:

print q(The character '(' starts a side comment.); 

> Wenn Sie diesen Fehler aus einer hier Dokument sind immer, können Sie unsichtbare Leerzeichen enthalten sind, vor oder nach Ihrem schließendes Tag Ein guter Programmierer Editor wird eine Möglichkeit haben, Ihnen zu helfen, diese Zeichen zu finden.

Uncaught exception from user code: 

String Terminator „str“ überall vor EOF

Verwandte Themen