Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Регекспы в переменных


Автор: biophreak 13.7.2007, 12:40
Народ - вопрос такой - как загнать регексп в переменную, чтоб потом его можно было юзать?


Код

my $test = "/^([0-9]){6}\z/";
if ($dst =~ $test) { return $dst; }

не пашет...подскажите плз smile

Автор: amg 13.7.2007, 12:47
Код

my $test = qr/^([0-9]){6}\z/;
if ($dst =~ /$test/) { return $dst; }

Кстати, что имелось в виду под "\z"?

Автор: biophreak 13.7.2007, 12:48
Спасибо огромное...а \z это я так....первое что в голову пришло smile)) регексп, я больше чем уверен - не рабочий smile))


Автор: amg 13.7.2007, 12:57
Почему не рабочий? Синтаксических ошибок нет. А \z не является метасимволом и означает просто букву z

Добавлено через 7 минут и 27 секунд
Вру. Есть такой метасимвол! Означает действительный конец строки. Не знал.

Автор: biophreak 13.7.2007, 13:08
Кстати...всплыл еще вопросец по теме: 

у меня регэксп из конфига читается и qr там не прокатывает smile
юзаю Config::IniFiles; как он их там парсит я уже хз, он отдает хеш сразу

Можете что-нибудь подсказать?

ЗЫЖ Вот пример кода, кстати:
Код

my %ini;                                                                   
tie %ini, 'Config::IniFiles', ( -file => "/opt/radius/acct/config.ini" );                                         
$e164route::cfg = Config::IniFiles->new( -file => "/opt/radius/acct/config.ini" );  
# а берется оттуда чето типа $e164route::debug=$ini{main}{debug};
# а в самом конфиге выглядит так:
# [main]                                                                     
# debug                           = 1                                        
# profiling                       = 1  

Автор: amg 13.7.2007, 13:35
Должно и с qr получаться. У меня, правда, модуль Config::IniFiles не стоит, проверить нет возможности, но должно работать
Код

# так 
$test = $cfg->val( 'Section', 'Parameter' ); 
if ($dst =~ /\Q$test/) { return $dst; } # \Q - на всякий случай

# и так
$test = qr(\Q$cfg->val( 'Section', 'Parameter' )); # \Q - на всякий случай
if ($dst =~ /$test/) { return $dst; }


Добавлено через 2 минуты и 19 секунд
# и так тоже
if ($dst =~ /\Q$cfg->val( 'Section', 'Parameter' )/) { return $dst; }

Автор: biophreak 13.7.2007, 14:07
Не работает :(

Автор: amg 13.7.2007, 15:30
biophreak, ничего не понял. 
Поставил я себе модуль Config::IniFiles. Работает. После того, как ты tie сделал, весь файл у тебя уже в хэше %ini. Можешь читать его, записывать - все изменения в хэше отобразятся на файл. Зачем 3-я строка в твоем примере? И на что напускать регулярное выражение?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)