| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Чайниковский вопрос про перл и регекспы |
| Автор: tihohod 18.6.2007, 19:03 |
| Мне, волею судеб, пришлось столкнуться со скриптом на 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 18.6.2007, 20:11 |
| А падает с какими ругательствами? |
| Автор: Nab 18.6.2007, 20:35 |
| Вот в этой строке return $name =~ /^[-_.@ [:alnum:]]+$/; мне неизвестна конструкция [:alnum:], подозреваю она должна идентифицировать любое число... но тогда здесь должна быть предварительная обработка функции... или можете ее попробовать заменить на такое return $name =~ /^[-_.@0-9]+$/; Хотя по идее обычно имя состоит из букв а не цифр, судя по имени функции... |
| Автор: errr 18.6.2007, 22:47 |
| :alnum: - это любой буквенно-цифровой символ. я тут попробовал у себя конструкцию с :alnum: , у меня ничего не тормозит, (не тормознее return $name =~/^(?:\w|[-_.@])+$/) наверно дело не в этом. попробуйте запустить с smallprof (http://search.cpan.org/~salva/Devel-SmallProf-2.02/lib/Devel/SmallProf.pm) |
| Автор: nitr 18.6.2007, 23:10 | ||
из доков:
так что очень похоже что вам надо (в двух словах) после вашего #!/usr/bin/perl указать (вставить) use POSIX; ;) |
| Автор: Nab 19.6.2007, 04:53 |
| Мдееее, надо восполнять пробелы в знаниях Добавлено через 4 минуты и 30 секунд А также я бы обратил внимание на пробел в классе символов, между @ и этим самым [:alnum:], возможно именно он и является недопустимым символом для имени... |