информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?Spanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
а чем этот способ не нравится? 19.02.05 08:09  Число просмотров: 1565
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
просто при вызове подпрограммы прописывай ещё один параметр:

sub xxx {
...
#имя вызывающей подпрограммы
#лежит в переменной $_[$#_]
...
}

sub sub1 {
....
&xxx(...,'sub1');
....
}

sub sub2 {
....
&xxx(...,'sub2');
....
}

Это, насколько мне известно, единственный вариант.
<programming>
[Perl] Работа с подпрограммами 18.02.05 13:35  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
В моём скрипте из двух разных подпрограмм в определенных случаях вызывается третья. Можно ли каким-то образом узнать, из какой именно подпрограммы была вызвана эта подпрограмма?
[Perl] Дык передавай отдельным параметром, откуда тебя вызвали 18.02.05 16:17  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Не совсем компетентен в данном вопросе, но попробую помочь. 18.02.05 16:10  
Автор: dr Tr0jan Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Не совсем компетентен в данном вопросе, но попробую помочь.
А если из подпрограммы какой-нибудь флаг (переменнную) передавать?
то есть в каждой из двух первых подпрограмм давать... 19.02.05 02:12  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
Отредактировано 19.02.05 02:27  Количество правок: 2
<"чистая" ссылка>
> Не совсем компетентен в данном вопросе, но попробую помочь.
> А если из подпрограммы какой-нибудь флаг (переменнную)
> передавать?
то есть в каждой из двух первых подпрограмм давать переменной определенное значение, а в третьей проверять это значение? если да, то мне нужно что-нибудь более изящное ;)
а чем этот способ не нравится? 19.02.05 08:09  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
просто при вызове подпрограммы прописывай ещё один параметр:

sub xxx {
...
#имя вызывающей подпрограммы
#лежит в переменной $_[$#_]
...
}

sub sub1 {
....
&xxx(...,'sub1');
....
}

sub sub2 {
....
&xxx(...,'sub2');
....
}

Это, насколько мне известно, единственный вариант.
да я не сказал, что он мне не нравится ;) 19.02.05 09:17  
Автор: n0xi0uzz <Черкасов Виктор> Статус: Member
<"чистая" ссылка>
да я не сказал, что он мне не нравится ;)
просто, во-первых, немного запутался - я перепутал присваивание значение переменной с передачей параметра подпрограмме.
а во-вторых, наедялся, что найдется другой способ, ведь девиз Perl'a "There's more than one way to do it" ;)
спасибо за помощь! ;)
можно пять копеек? 22.02.05 00:05  
Автор: whiletrue <Роман> Статус: Elderman
Отредактировано 22.02.05 00:12  Количество правок: 1
<"чистая" ссылка>
> да я не сказал, что он мне не нравится ;)
> просто, во-первых, немного запутался - я перепутал
> присваивание значение переменной с передачей параметра
> подпрограмме.
> а во-вторых, наедялся, что найдется другой способ, ведь
> девиз Perl'a "There's more than one way to do it" ;)
> спасибо за помощь! ;)

Твоя же процедура должна вести себя по-разному, взависимости от чего-то. В твоем случае от того откуда она вызвана. Чем это не ее параметр? Однако, предлагаю чуть побольше абстрагирваться, т.е. пусть этот параметр означает не то из какой процедуры она вызвана, а то в чем различия в функциональности. Напрмер: "Печатать в STDOUT или в STDERR", "Выводить варнинги или нет", "Прибавлять счетчик или нет" и т.д. А то вдруг тебе понадобится ее еще в третьей процедуре использовать - тогда придется ее переписывать...
в "во-первых" как раз и приведен альтернативный (собственный), но менее удачный способ :-) 21.02.05 19:43  
Автор: LLL <Алексей> Статус: Member
<"чистая" ссылка>
Не понял... Всмысле? А есть другие варианты? Если только объекты прикрутить, но это ещё менее удачно, имхо. 21.02.05 21:45  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
другой вариант уже был упомянут самим n0xi0uzz 21.02.05 22:03  
Автор: LLL <Алексей> Статус: Member
<"чистая" ссылка>
Выше предлагали передавать парметр в процедуру, а n0xi0uzz понял, что признак вызывающего предложено передавать через переменную (глобальную).
Это и есть альтернативный способ, на существование которого намекал n0xi0uzz, но передача параметром выглядит явно лучше.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach