![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Можно ли обратится к области видимости того места, откуда вызвана функция? Что бы эта функция работала с переменными в той области видимости. Как это делают некоторые встроенные функции и операторы, например
|
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
-------------------- Died at Life.pl line 21 |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Обратите внимание на my $_ ... Print работает именно с той областью видимости, в которой он находится.
|
|||
|
||||
| klem4 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 27.7.2008 Репутация: 2 Всего: 2 |
Не уверен что речь об этом, но может поможет:
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Ответ "вообще" - да, можно. Другой вопрос, зачем вам это надо? Т.к. существует как минимум 3 способа работать с "вышестоящими" переменными. И реальное "залезание вверх по стеку" - мне понадобилось только 1 раз, когда я писал свой стектрейс. Попробуйте описать задачу.
|
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
Например иногда надо вставить в модуль функцию, работающую в том же адресном пространстве, что и вызывающая её функция. Но я думаю, что вопрос автора просто неправильно сформулирован и ему хотелось чего-то другого. |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Как это сделать? Я не нашел. Нужно для написания библиотечных функций. Например таких, которые используют переменную по умолчанию $_. Нужно учесть, что переменная $_ может быть обьявленна как my. |
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Если речь только о $_, то в 5.10 есть прототип "_" - то, что надо. Единственное ограничение - после него не может быть обязательных параметров.
|
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
В том то и дело, что список он не принимает.
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Т.е. как-то так:
sub bar{} my @foo = qw(); bar; #и оно как-то узнало, что вызывается с аргументом @foo ? Имхо, это очень плохая и неочевидная функция. Лучше, всегда лучше, явно указывать, что ф-ция принимает в качестве параметров - код должен быть самодокументирущимся. Но если очень хочется прострелить ногу - вуаля - cpan://PadWalker |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
К сожалению, перл не приспособлен к написанию документации на функции... А насчёт $_ - уже несколько лет где-то я встречаю рекомендации эту переменную не использовать. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
в смысле "не приспособлен"?
и где вы встречаете такие странные рекомендации? |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
Это тема для другого топика. Сходу и не найду где. Но это рекомендации естественные, а не странные. Глобальная переменная, в некоторых версиях перла использование замедляет программу, снижает читаемость. В коротких скриптах использовать удобно, в больших появляются проблемы. |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
хотя бы кратко...
в каких версиях? |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
Это очевидно для любого, работавшего с php или java, дадаже JavaScript. Попробуйте добиться удобства описания функций и модулей, например в Eclipse, сравнимого с описанием для php, java, javascript. В POD нет ни единого стиля, ни единых форматов, все описывают как хотят, в результате огромная часть документации нечитаема. Долго changelog'и читать, не буду. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |