当我运行以下代码时,脚本将以expected three at c:\temp\die.pl line 13.
终止。
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;
我有点惊讶,因为导致死亡的实际行是第21行。
当计算(?)死亡线时,解释器似乎不计算替换的模式部分。第6行将是$text =~ s{
,然后是代码,直到}{
被"跳过",使第7行成为以下空行,第8行# Insert a few lines on purpose
,依此类推,直至达到{ {1}}计算了13行。
预计会出现这种情况吗?
有没有办法让perl打印真正的死亡线?
die 'expected three' unless $3 eq 'three';
以perl -v
有人建议我使用This is perl 5, version 18, subversion 1 (v5.18.1) built for MSWin32-x86-multi-thread-64int
代替carp
。
它现在已经死亡(或鲤鱼),只有稍微不同的die
我将其归属于额外的第三行expected three at c:\temp\die.pl line 14
。
答案 0 :(得分:4)
一点点调查显示:
v5.10.1
在第13行死亡。
v5.18.4
在第13行死亡。
v5.20.2
在第21行死亡。
v5.22.0
在第21行死亡。
然后在检查perldelta for 5.20后,我发现:
现在可以正确报告多行引号类运算符中的行号。 [perl#3643]
因此,似乎获得正确行号的唯一方法是升级到更高版本的perl。