Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как обратиться к шаблону?  (Прочитано 6497 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kerry
Новенький

ru
Offline Offline

« : 03-12-2013 20:34 » 

есть текстовый файл с набором перловских регулярных выражений, написан в таком виде:

regexp1
regexp2
...
regexpN

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

вот что есть на текущий момент:


...

Код:
open RULEZZZ, '<rules.sh>';
@rules=<RULEZZZ>;
open SENTENCE, '>SENTENCES.txt';

foreach $arg (@rules)
{
$regexp = rx /$arg/; # на эту строчку интерпретатор ругается.
if ($str=~ /(<$regexp>)/)
{
printf SENTENCE $str;
}
}
print "DONE!";
close;


здесь из файла берется строчка, оператором rx, про который я прочитал вот здесь http://perl6.ru/2004/02/
превращается в выражение и далее идет попытка поиска.

вопрос в следующем: как скормить программе этот файл, чтобы она построчно считывала выражения и в соответствии с ними искала строку? может есть альтернативные решения, как не трогать основной код программы?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 04-12-2013 04:59 » new

Perl6 — это не то, что тебе нужно. Читай Perl5. Это не одно и тоже!

http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators

Код: (Perl)
my ($fd, @rules_re);
open $fd, '<', 'rules.sh' or die 'open: ' . $!;
push @rules_re, qr($_) while <$fd>;
close $fd;

my $str = 'aaaaaaaa';

for my $re (@rules_re) {
  next unless $str =~ $re;
  print "Done!\n";
  last;
}
« Последнее редактирование: 04-12-2013 17:16 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines