| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Валидация имени переменной PERL |
| Автор: comhunt 6.3.2010, 14:16 |
| Через переменную $varname поступает имя переменной. Далее необходимо обратиться к значению самой переменной $$varname. Но перед этим надо сделать валидацию корректности всех символов внутри $varname на предмет допустимых для написания переменной в PERL. Как это можно сделать универсально при помощи одного или нескольких регулярных выражений? В принципе интересен частный случай когда переменная только скалярная и общий когда это может быть и скаляр и @ % или typeglob |
| Автор: dva300 7.3.2010, 11:16 | ||||
как вариант Правильный скаляр : $x, $strName, $y1, $_name Не правильный скаляр : yyy, $1y, $_1 |
| Автор: comhunt 7.3.2010, 13:56 |
| А почему там стоит буква Я ? а буква А- латинская. Разве имена переменных в PERL могут быть написаны русскими буквами? А какую максимальную длину может иметь имя переменной в PERL ? Интерпретатор PERL это как-то ограничивает? |
| Автор: dva300 7.3.2010, 14:22 | ||
это я ошибся length для получения длины длины. |
| Автор: comhunt 7.3.2010, 14:31 |
| dva300, спасибо. теперь все корректно работает Ну на счет длины я догадывался как определить ее - при помощи функции length. Но на самом деле интересует принципиально другой вопрос. А что делать с этой длинной? С каким максимальным значением ее сравнивать? И есть ли оно в PERL для имени переменной? |
| Автор: DurRandir 7.3.2010, 14:44 |
| Вам надо прочитать про хеши. И никогда-никогда не делать то, чем вы сейчас пытаетесь заняться. По многим причинам. Прочитайте про use strict, про лексические перменные (my). PS: Это неверное регулярное выражение. |
| Автор: dva300 7.3.2010, 14:57 | ||
стало очень интересно почему это "никогда-никогда" и по каким это "многим причинам". надеюсь это не военная тайна и как мне прикрутить my к решению выше описанной задачи ? |
| Автор: DurRandir 7.3.2010, 15:42 |
| my здесь при том, что он создаёт лексические переменные, доступ к которым ч/з $$ не получить. А в нормальной программе (при использовании strict) почти все переменные - лексические. Пакетные переменные, в большинстве случаев, - пережиток прошлых perl'ов. Никогда-никогда - потому что вы не знаете, что вам придёт в качестве имени переменной. Вы пытаетесь проверить её только на синтаксическую, но не семантическую валидность - вам просто возьмут, и перезапишут какую-либо внутреннюю переменную модуля (или у вас даже не модуль, а монолитный скрипт?))). Решать задачу надо через хеш - вместо имён переменных - ключи хэша, в этом случае эти значения никуда "вовне" не утекут. |
| Автор: RomanCh 8.3.2010, 02:55 | ||
| В общем и целом согласен с предыдущим оратором - автору топика хочется чего-то странного, такого какого делать не нужно ни при каких условиях. Но всё же, если вам хочется что-нибудь "эдакого" (откровенно говоря - извращений
PS use warnings выключаются что бы в stderr не плевалось всякое непотребство, если например пришли кавычки в имене переменной. Вообще же сильно рекомендую всегда использовать эту директиву. PSPS Вообще при некоторых камланиях perl вроде как можно научить понимать идентификаторы написанные буквами отличными от латинских (юникодом если), только что-то не уверен что кто-нибудь захочет такое видеть в чужом (и своём тоже) коде. |