Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Захватывает слишком много :) 
:(
    Опции темы
dixoNICH
Дата 24.10.2011, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



*
#first.com#
MinfieldFolder#40
JackFolder#30
BookFolder#20
*
#second.com#
SoldFolder#50
MichFolder#100
*

есть такой файлик, мне вводят сайт, например, first.com и я должен сделать такой хешик
%h = ( MinfieldFolder => 40, JackFolder => 30, BookFolder => 20);
но регвыр ловит не 
MinfieldFolder#40
JackFolder#30
BookFolder#20
а всё, до последней звёздочки
собственно вот код функции
помогите исправить, пожалста)
Код

sub ReadInHash() {
    local $/ = \0;
    my $site = $_[0];
    my %hash;
    open file, "price.cfg" or die '$!'; 
    my $file = <file>; 
    $file =~/\*\n\#$site\#\n(.*)\n\*/s; 
    $prc = $1;
    $hash{$1} = $2 while($prc =~/(\w+)#(\d+)/);
    return %hash;
}

PM MAIL   Вверх
dixoNICH
Дата 24.10.2011, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



с ловлей разобрался) забыл о ленивости регвыров)
но теперь циклится в вайле почему-то
PM MAIL   Вверх
alezzz
Дата 24.10.2011, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 11
Всего: 14



В while циклится может из-за того что регулярка в каждом цикле совпадает, раз уж использовали while добавте модификатор global
PM MAIL   Вверх
dixoNICH
Дата 24.10.2011, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



заработало.
можете пояснить, почему? )
PM MAIL   Вверх
alezzz
Дата 24.10.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 11
Всего: 14



С модификатором global цикл while работает пока в регулярном выражении находятся совпадения, без него у вас всегда будет возвращятся только первое совпадение. Если не использовать global то нужно изменять строку (например заменой s///), иногда полезно когда нужно пройтись рег. выражением по строке еще раз.

Это сообщение отредактировал(а) alezzz - 24.10.2011, 22:40
PM MAIL   Вверх
dixoNICH
Дата 24.10.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



спасибо)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.