Почему smartmatch возвращает false, когда я сопоставляю регулярное выражение с косой чертой? - PullRequest
7 голосов
/ 05 мая 2011

Я пытаюсь сопоставить простую строку с шаблоном регулярного выражения с помощью оператора 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", но это не так.Почему нет?

1 Ответ

13 голосов
/ 05 мая 2011

Удалите косые черты из вашего регулярного выражения:

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

Поскольку вы заключаете регулярное выражение в qr{}, все, что внутри фигурных скобок, интерпретируется как регулярное выражение.Поэтому, если бы вы расширили свой поиск, это было бы:

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

Поскольку ваша строка не начинается или не заканчивается косой чертой (или не имеет каких-либо подстрок, которые делают), тогда совпадение не будет выполненои вы не печатаете ok.

...