![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| tihohod |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 18.6.2007 Репутация: нет Всего: нет |
Мне, волею судеб, пришлось столкнуться со скриптом на Perl.
К сожалению, я им не владею :( Проблема в том, что при его исполнении жестко падает приложение (линукс-демон), вызывающий Перл-интерпретатор. Вот кусочек проблематичного кода: sub is_name_valid ($) { my $name = shift; utf8::decode($name); return unless ( defined($name) ); return unless ( length($name) ); return $name =~ /^[-_.@ [:alnum:]]+$/; } Этот скрипт вызвается в качестве callback-а для функции validate_with. Perl 5.8 Подскажите пожалуйста - в чем может быть проблема? |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
А падает с какими ругательствами?
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Вот в этой строке
return $name =~ /^[-_.@ [:alnum:]]+$/; мне неизвестна конструкция [:alnum:], подозреваю она должна идентифицировать любое число... но тогда здесь должна быть предварительная обработка функции... или можете ее попробовать заменить на такое return $name =~ /^[-_.@0-9]+$/; Хотя по идее обычно имя состоит из букв а не цифр, судя по имени функции... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| errr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 18.6.2007 Репутация: нет Всего: нет |
:alnum: - это любой буквенно-цифровой символ.
я тут попробовал у себя конструкцию с :alnum: , у меня ничего не тормозит, (не тормознее return $name =~/^(?:\w|[-_.@])+$/) наверно дело не в этом. попробуйте запустить с smallprof (http://search.cpan.org/~salva/Devel-SmallProf-2.02/lib/Devel/SmallProf.pm) |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
из доков:
так что очень похоже что вам надо (в двух словах) после вашего #!/usr/bin/perl указать (вставить) use POSIX; ;) |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Мдееее, надо восполнять пробелы в знаниях
Добавлено через 4 минуты и 30 секунд А также я бы обратил внимание на пробел в классе символов, между @ и этим самым [:alnum:], возможно именно он и является недопустимым символом для имени... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| amg |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
А регулярное выражение можно сократить, т.к. [_[:alnum:]] в точности эквивалентно [\w]. Получится
Не вижу в этой подпрограмме ничего такого, что могло бы приводить к краху. Единственное, в описании прагмы utf8 настоятельно НЕ рекомендуют использовать ее ни для каких-либо целей, кроме как сказать перлу, что скрипт написан в UTF8. А в подпрограмме utf8 используется для декодировки. Для этого просят использовать прагму encoding. |
||||
|
|||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |