これは驚くべきことではありません:
% perl -ne 'print if /c++/' foo
Nested quantifiers in regex; marked by <-- HERE in m/c++ <-- HERE / at -e line 1.
しかし、これはちょっと:
% grep c++ foo
blah c++ blah
--に対応するために grep が何をしているのかはわかりませんが++
、perl でも同じようにしたいと思います。または、少なくとも、この状況に対処するための優雅な方法。このパターンは、grep c++
それが機能することに気づき、perl の失敗に驚いたユーザーからのものです。
使いたくないquotemeta
; 私の実際のコードは、(ユーザーからの)正規表現パターンを期待しています:
while ( my $pattern = shift @pat_list ) {
my $regex = $opts{case} ? qr/$pattern/ : qr/$pattern/i;
my @hits = grep { /$regex/ } @lines;
パターンにエラーがあることを検出してから に戻すことで問題ないと思いますquotemeta
。しかし、エラーをトラップするために使用できないようですeval
(構文エラーと見なされるためですか?)。