Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |
а чем этот способ не нравится? 19.02.05 08:09 Число просмотров: 1507
Автор: 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, но передача параметром выглядит явно лучше.
|
|
|