2010-10-29 22 views
9

Pourquoi j'obtiens cette erreur?Impossible de trouver la terminaison de chaîne "str" ​​avant EOF

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"; 
} 

Répondre

24

Vous ne devriez pas avoir un espace ici:

str 
^

La terminaison heredoc doit être sur une ligne par lui-même et ne devrait pas avoir quoi que ce soit (même pas espace) qui l'entoure.

+1

Puis-je recommande aux gens de configurer leur éditeur pour afficher les espaces en fin de ligne, car il ne permet attraper ce genre de bugs – mfontani

+0

Ne pas diss heredocs. Il y a quelque chose de merveilleux. – tchrist

1

Ou mieux Utilisez le plug-in Eclipse Perl Integration ou Padre pour éditer votre code perl. Il affiche les erreurs liées à la syntaxe en temps réel.

1

Vous pouvez utiliser diagnostics pour obtenir de l'aide plus prolixe sur les messages d'avertissement:

Vous ne trouvez pas fin de chaîne « str » partout avant EOF (F) Les chaînes de Perl peuvent étirer sur plusieurs lignes. Ce message signifie que le délimiteur de fermeture a été omis. Parce que les citations bracketing comte niveaux de nidification, ce qui suit est manquant sa parenthèse finale:

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

> Si vous obtenez cette erreur d'un ici-document, vous avez peut-être inclus des espaces invisibles avant ou après votre étiquette de fermeture. L'éditeur d'un bon programmeur aura un moyen de vous aider à trouver ces caractères.

Uncaught exception from user code: 

Vous ne trouvez pas de terminaison de chaîne « str » partout avant EOF