![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| zyxerr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 17.7.2008 Репутация: 2 Всего: 2 |
1) if (“199.168.0.19” =~ m/(\d+)/g){print “found: $1\n”}
2) foreach (“199.168.0.19” =~ m/(\d+)/g){print “found: $1\n”} 3) while (“199.168.0.19” =~ m/(\d+)/g){print “found: $1\n”} . почему в первом случае пишет "199" (это в принципе понятно) во втором случае пишет “199.168.0.19” (это тоже) а в третьем случае пишет "19.19.19.19" (а здесь почему??) . кто знает еще примеры подобных "ловушек"? Добавлено через 2 минуты и 52 секунды Т.е. вот так выглядят: 1) if (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”} 2) foreach (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”} 3) while (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”} Добавлено через 5 минут и 11 секунд ой, простите, совсем запутался :( . 1) if (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”} 2) while (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”} 3) foreach (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”} . почему в первом случае пишет "199" (это в принципе понятно) во втором случае пишет “199.168.0.19” (это тоже) а в третьем случае пишет "19.19.19.19" (а здесь почему??) . |
|||
|
||||
| amg |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
zyxerr, "19.19.19.19" -- это 2-й, а не 3-й случай. Именно во 2-м случае регулярное выражение вынуждено отработать сразу и в списковом контексте. При этом оно вернет список из 4-х элементов, ну а $1 -- последовательно пробежится по всем числам и останется равной последнему (19). Ну и foreach в итоге 4 раза напечатает это число.
|
|||
|
||||
| zyxerr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 17.7.2008 Репутация: 2 Всего: 2 |
да, именно. Причем, если в print набрать НЕ $1 а $_, то результат foreach совпадает с while!
|
|||
|
||||
| tolkien |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
В случаи foreach (“199.168.0.19” =~ m/(\d+)/g){print “$1 ”}
Сначала foreach формирует список. Потом последовательно по списку проходит. Отсюда и такой результат. Он послед присваивает значения из списка переменной $_. А вы печатайте значение переменной $1. Которое будет иметь всегда 19. Т.к имеено это значение было последним найденным регулярным выражением. |
|||
|
||||
| zyxerr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 17.7.2008 Репутация: 2 Всего: 2 |
ясно, спасибо
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |