![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| comhunt |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
Через переменную $varname поступает имя переменной. Далее необходимо обратиться к значению самой переменной $$varname. Но перед этим надо сделать валидацию корректности всех символов внутри $varname на предмет допустимых для написания переменной в PERL.
Как это можно сделать универсально при помощи одного или нескольких регулярных выражений? В принципе интересен частный случай когда переменная только скалярная и общий когда это может быть и скаляр и @ % или typeglob Это сообщение отредактировал(а) comhunt - 6.3.2010, 14:21 |
|||
|
||||
| dva300 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
как вариант Правильный скаляр : $x, $strName, $y1, $_name Не правильный скаляр : yyy, $1y, $_1 Это сообщение отредактировал(а) dva300 - 7.3.2010, 14:51 --------------------
Участник движения Культура Вождения |
||||
|
|||||
| comhunt |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
А почему там стоит буква Я ? а буква А- латинская. Разве имена переменных в PERL могут быть написаны русскими буквами?
А какую максимальную длину может иметь имя переменной в PERL ? Интерпретатор PERL это как-то ограничивает? Это сообщение отредактировал(а) comhunt - 7.3.2010, 14:16 |
|||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
это я ошибся length для получения длины длины. --------------------
Участник движения Культура Вождения |
|||
|
||||
| comhunt |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
dva300, спасибо. теперь все корректно работает
Ну на счет длины я догадывался как определить ее - при помощи функции length. Но на самом деле интересует принципиально другой вопрос. А что делать с этой длинной? С каким максимальным значением ее сравнивать? И есть ли оно в PERL для имени переменной? |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Вам надо прочитать про хеши. И никогда-никогда не делать то, чем вы сейчас пытаетесь заняться. По многим причинам. Прочитайте про use strict, про лексические перменные (my).
PS: Это неверное регулярное выражение. |
|||
|
||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
стало очень интересно почему это "никогда-никогда" и по каким это "многим причинам". надеюсь это не военная тайна и как мне прикрутить my к решению выше описанной задачи ? --------------------
Участник движения Культура Вождения |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
my здесь при том, что он создаёт лексические переменные, доступ к которым ч/з $$ не получить. А в нормальной программе (при использовании strict) почти все переменные - лексические. Пакетные переменные, в большинстве случаев, - пережиток прошлых perl'ов.
Никогда-никогда - потому что вы не знаете, что вам придёт в качестве имени переменной. Вы пытаетесь проверить её только на синтаксическую, но не семантическую валидность - вам просто возьмут, и перезапишут какую-либо внутреннюю переменную модуля (или у вас даже не модуль, а монолитный скрипт?))). Решать задачу надо через хеш - вместо имён переменных - ключи хэша, в этом случае эти значения никуда "вовне" не утекут. |
|||
|
||||
| RomanCh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 23.8.2009 Репутация: нет Всего: нет |
В общем и целом согласен с предыдущим оратором - автору топика хочется чего-то странного, такого какого делать не нужно ни при каких условиях.
Но всё же, если вам хочется что-нибудь "эдакого" (откровенно говоря - извращений
PS use warnings выключаются что бы в stderr не плевалось всякое непотребство, если например пришли кавычки в имене переменной. Вообще же сильно рекомендую всегда использовать эту директиву. PSPS Вообще при некоторых камланиях perl вроде как можно научить понимать идентификаторы написанные буквами отличными от латинских (юникодом если), только что-то не уверен что кто-нибудь захочет такое видеть в чужом (и своём тоже) коде. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |