编译正则表达式时可以捕获“无法识别的转义”警告吗?

Axe*_*man 4 regex perl

我正在从配置文件中读取正则表达式,其中可能包含或不包含无效语法。(它被锁定在防火墙后面,所以我们不要讨论安全性。)我已经能够测试一些错误并给出友好的消息。

但在这方面却没有这样的运气:

Unrecognized escape \Q passed through in regex

我知道是什么原因导致的,我只是想知道是否可以在 Perl 5.8 中捕获它。到目前为止,它一直抵制我检查这种情况的努力。

所以问题是:有人知道如何捕捉这个吗?我必须重定向 STDERR 吗?

Sin*_*nür 5

您可以将警告设为 FATAL 并使用块 eval:

#!/usr/bin/perl

use strict;
use warnings;

my $s = '\M';

my $r = eval {
    use warnings FATAL => qw( regexp );
    qr/$s/;
};

$r or die "Runtime regexp compilation produced:\n$@\n";
Run Code Online (Sandbox Code Playgroud)