Quando eseguo il seguente codice, lo script muore con expected three at c:\temp\die.pl line 13.
.Perl riporta il numero di riga errato se muore in sostituzione multi linea. È previsto o un bug?
use warnings;
use strict;
my $text = 'one two Three';
$text =~ s{
(\w+) # Find a word
\s+
(\w+) # Find another word
\s+
(\w+) # Find third word
}{
# Insert a few lines on purpose
# to make the point.
die 'expected one' unless $1 eq 'one';
die 'expected two' unless $2 eq 'two';
die 'expected three' unless $3 eq 'three';
}ex;
io sono un po 'sorpreso perché la linea attuale che causa la morte è la linea 21.
Sembra che l'interprete non conta la parte modello della sostituzione quando si calcola (?) La linea di Morte. La riga 6 è $text =~ s{
quindi il codice fino a }{
viene "saltato", rendendo la riga 7 la seguente riga vuota, la riga 8 # Insert a few lines on purpose
e così via fino a raggiungere die 'expected three' unless $3 eq 'three';
contando 13 righe.
È previsto questo comportamento?
C'è un modo per stampare la vera linea della morte?
perl -v
inizia con This is perl 5, version 18, subversion 1 (v5.18.1) built for MSWin32-x86-multi-thread-64int
Utilizzando la carpa, invece di morire
è stato suggerito che uso invece di die
.
Ora muore (o carpe) con l'unico leggermente diverso expected three at c:\temp\die.pl line 14
che attribuisco alla terza riga aggiuntiva use Carp;
.
in linux muore effettivamente alla riga 21 – sotona
È possibile stampare l'errore completo tramite 'Carpa' - sarebbe interessante vedere ciò che viene segnalato, dato questo comportamento. La mia ipotesi qui sarebbe che la regex spezzettata che conta in modo diverso .. Posso inventare "13" contando ogni parte di regex come una linea e scartando le righe vuote all'interno della regex, quello che posso immaginare di essere fatto. – zdim
Per me, con v5.16 su CentOS 7, muore anche sull'ultima riga vuota prima di '} {'. – zdim