Проблемы при использовании предварительно скомпилированных регулярных выражений в Perl

У меня возникают некоторые проблемы с сопоставлением, когда я пытаюсь реализовать предварительно скомпилированное регулярное выражение в скрипте Perl. У меня скрипт работает без предварительной компиляции, и каждый раз, когда у меня есть экспресс, который охватывает строки, он не возвращает совпадений при предварительной компиляции. Так, например:

my $regex_partner = qr/<h1 id="PartnerName">(?<partner_name>.*?)<\/h1>/;
$content =~ $regex_partner;
$partner_name = $+{partner_name};

Отлично работает при предварительной компиляции, но:

my $regex_web =~ qr/Company Website:.*openWindow[(]'(?<website>http:\/\/.*?)'/s;
$content =~ $regex_web;
$website = $+{website};

ничего не возвращает, но работает, если я удаляю всю предварительную компиляцию. Кажется, что каждый раз, когда используется qr//s, это не сработает.

помощь?


person user1058343    schedule 21.11.2011    source источник
comment
Какую версию Perl вы используете?   -  person cjm    schedule 21.11.2011


Ответы (1)


У вас опечатка.

my $regex_web =~ qr/.../s;

Которые должны быть:

my $regex_web = qr/.../s;

Первый выполняет сопоставление шаблона с $regex_web. Последний присваивает шаблон $regex_web. Если бы предупреждения были включены, вы бы получили предупреждение «Использование неинициализированного значения $regex_web в сопоставлении с образцом».

Если это не опечатка в вашем сообщении?

person Schwern    schedule 21.11.2011