PERL Спец символы в регулярке через переменную

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
garrotte
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-02-27 15:56:09
Контактная информация:

PERL Спец символы в регулярке через переменную

Непрочитанное сообщение garrotte » 2010-05-09 13:29:21

Здравствуйте
Есть небольшой скрипт, для поиска в лог файлах, запускается из строки в виде ./parser.pl pattern, а результат скидывает в отдельный файл, его потом черех www просматривают
выглядит вкратце так, заранее извиняюсь перед знатоками за корявость, не кодер)

Код: Выделить всё

$path="/logs/items/*.log.*";
@a= glob($path);

&conc(@a);

# собственно сам поиск.. то есть если строка совпадает с аргументом переданным для поиска, строка скидывается в массив, который потом пишется в файл
foreach $arg(@ARGV){
    foreach(@all){
               if( /($arg)/g ){
                push(@out,"$_");
           }
    }
    &wfile(@out);
    $#out=-1;
}

# тут спихивает содержимое всех файлов в массив
sub conc(){
    foreach(@a){
           open(F,"$_");
           my @lines= <F>;
           close(F);
           push(@all,@lines);
    }
    return @all;
}

подскажите пожалуйста, как сделать, что-бы в шаблоне поиска, передаваемом через переменную, могли присутствовать спецсимволы.. то есть например там может быть что-нить типа ~^mega_user^~, скрипт неадекватно реагирует на такие предъявы)
есть подозрение что я вообще везде не прав в этом скрипте :)

заранее спасибо

ЗЫ. .с правдником товарищи !:)

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: PERL Спец символы в регулярке через переменную

Непрочитанное сообщение ProFTP » 2010-05-09 14:02:03

т.е. это тут

Код: Выделить всё

     if( /($arg)/g ){
?

как вы ставите, и какая ошибка?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
garrotte
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-02-27 15:56:09
Контактная информация:

Re: PERL Спец символы в регулярке через переменную

Непрочитанное сообщение garrotte » 2010-05-09 17:49:35

ProFTP
т.е. это тут
да, аргумент с которым скрипт запускается попадает сюда.. ошибки никакой не происходит, но если например в качестве шаблона для поиска задать ~^bla^~,( то есть запустить скрипт как parser.pl "~^bla^~" ), поместив такое-же сочетание в лог-файл, то он ничего не найдет..
если попробовать поискать просто bla, то будет найдена строка содержащая ~^bla^~.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: PERL Спец символы в регулярке через переменную

Непрочитанное сообщение thefree » 2010-05-10 9:48:58

Код: Выделить всё

if( /($arg)/ge){
Экранируем в запосе символы, ~\^bla\^~ ищем так

_http://www.intuit.ru/department/pl/perl/8/1.html
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
garrotte
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-02-27 15:56:09
Контактная информация:

Re: PERL Спец символы в регулярке через переменную

Непрочитанное сообщение garrotte » 2010-05-10 13:24:29

thefree.. спасибо)
я знаю что нужно экранировать спецсимволы.. просто не догнал как это сделать, когда они передаются через переменную, а не явно в m// прописаны..
в итоге все оказалось банально, даже не подумал о существовании символов \Q\E в голове почему-то не отложились :)
спасибо всем :)