Wenn ich den folgenden Code ausführe, stirbt das Skript mit expected three at c:\temp\die.pl line 13.
.
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
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.
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.