Perl meldet die falsche Zeilennummer, wenn es bei Mehrfachzeilenersetzung stirbt. Ist das erwartet oder ein Fehler?

8

Wenn ich den folgenden Code ausführe, stirbt das Skript mit expected three at c:\temp\die.pl line 13. .

%Vor%

Ich bin etwas überrascht, weil die Linie, die den Tod verursacht, Zeile 21 ist.

Es scheint, dass der Interpreter den Musterteil der Substitution nicht zählt, wenn er die Todeslinie berechnet (?). Zeile 6 wäre $text =~ s{ , dann der Code, bis }{ "übersprungen" wird, Zeile 7 die folgende leere Zeile, Zeile 8 # Insert a few lines on purpose usw., bis die 'expected three' unless eq 'three'; 13 Zeilen erreicht hat.

Wird dieses Verhalten erwartet?

Gibt es eine Möglichkeit, Perl die wahre Todeslinie drucken zu lassen?

perl -v beginnt mit This is perl 5, version 18, subversion 1 (v5.18.1) built for MSWin32-x86-multi-thread-64int

Karpfen anstelle von Würfel verwenden

Es wurde vorgeschlagen, dass ich carp anstelle von die verwende.

Es stirbt jetzt (oder Karpfen) mit der nur geringfügig abweichenden expected three at c:\temp\die.pl line 14 , die ich der zusätzlichen dritten Zeile use Carp; zuschreibe.

    
René Nyffenegger 16.03.2016, 08:28
quelle

1 Antwort

4

Ein schnelles Stück Forschung hat dies gezeigt:

v5.10.1 stirbt in Zeile 13.
v5.18.4 stirbt in Zeile 13.
v5.20.2 stirbt in Zeile 21.
v5.22.0 stirbt in Zeile 21.

Nachdem ich das perldelta für 5.20 überprüft hatte, fand ich:

  

Zeilennummern in mehrzeiligen Anführungszeichen-Operatoren werden jetzt korrekt gemeldet. [perl # 3643]

So scheint es, als wäre die einzige Möglichkeit, die richtige Zeilennummer zu erhalten, ein Upgrade auf eine spätere Version von Perl.

    
Uncle Arnie 16.03.2016, 12:47
quelle

Tags und Links