使用Keyword :: Simple恢复正确的行号

时间:2014-06-30 19:56:32

标签: perl keyword line-numbers

我正在使用Keyword::Simple与Perl关键字API进行交互以注入一些自定义代码。问题是,如果我的自定义代码中包含换行符,代码中的任何错误都将从原始文件中的错误行报告。例如:

# KWTest.pm

package KWTest;

use strict;
use warnings;

use Keyword::Simple;

sub import {
    my $class = shift;
    Keyword::Simple::define mydie => sub {
        my $ref = shift;
        substr $$ref, 0, 0, qq{\n\n\n\n\n die "oh noes!!!!"};
    };

}

1;

然后

perl -MKWTest -E 'mydie'
oh noes!!!! at -e line 6.

我知道perl将尊重#line指令来更改报告的行号,但为了在生成的代码中注入这些,我需要先知道预先存在的行号。

我想我也可以通过确保生成的代码不包含换行符来实现,但这似乎不那么有趣。

1 个答案:

答案 0 :(得分:3)

诀窍在于您解析代码,计算跳过的换行次数,然后在注入代码时,注入相同数量的换行符,并且不要注入任何不必要的换行符。这有点工作,但can be done