7

smartmatch演算子を使用して、単純な文字列を正規表現パターンと照合しようとしています。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use open qw(:std :utf8);

my $name = qr{/(\w+)/};
my $line = 'string';

print "ok\n" if $line ~~ /$name/;

これで「ok」と表示されると思いますが、そうではありません。なぜだめですか?

4

1 に答える 1

13

正規表現からスラッシュを削除します。

my $name = qr{(\w+)};

で正規表現をラップしているためqr{}、中かっこ内のすべてが正規表現として解釈されます。したがって、検索範囲を広げると、次のようになります。

print "ok\n" if $line ~~ /\/(\w+)\//;

文字列がスラッシュで始まったり終わったりしていない (またはスラッシュを含む部分文字列がない) ため、一致は失敗し、出力しませんok

于 2011-05-05T18:17:37.100 に答える