2009-05-20 9 views
3

私は構成ファイルから正規表現を読んでいますが、無効な構文が含まれている場合とそうでない場合があります。 (それはファイアウォールの背後に閉じ込められているので、セキュリティには入っていません)。私はいくつかのエラーをテストし、フレンドリーなメッセージを伝えることができました。正規表現をコンパイルするときに「認識できないエスケープ」警告をキャプチャできますか?

この1にそのような運:

Unrecognized escape \Q passed through in regex

私はそれを引き起こすものを知って、私はちょうど私がPerlの5.8でそれをキャプチャすることができるかどうかを知りたいです。今のところ、この状態をチェックする私の努力に抵抗しています。

質問は次のとおりです。これをキャプチャする方法を誰かが知っていますか? STDERRをリダイレクトする必要がありますか?ここで

答えて

3

あなたは警告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:\[email protected]\n"; 
+0

私のために働いた、ありがとう。 – Axeman

1

がエラーにこの警告を有効にする方法である:ここでは

sub un { 
    local $SIG{__WARN__} = sub { 
    die $_[0] if $_[0]=~/^Unrecognized escape /; 
    print STDERR $_[0] 
    }; 
    qr{$_[0]} 
} 
un('al\Fa'); 
print "Not reached.\n"; 

は、この警告を無視する方法である:

sub un { 
    local $SIG{__WARN__} = sub { 
    print STDERR $_[0] if $_[0]!~/^Unrecognized escape /; 
    }; 
    qr{$_[0]} 
} 
un('al\Fa'); 
print "Reached.\n"; 
+0

を「警告なし 『warning_categoryを』;」 –

0

それは警告ですので、あなたのようにSTDERRをリダイレクトする必要があるだろうよく

あなたが設定ファイルから取得した正規表現文字列を補間しているので、あなたが警告を受けていると思います。使用する前に正規表現文字列にs/\\/\\\\/gを入れてみてください。

+0

おっと、それは私が意味するものです:STDERR - 実際に最初にそれを入力するとSTOUTでした。 :D – Axeman

関連する問題