У меня есть ситуации, когда мне нужно найти абонента пакета и мой код выглядит примерно так:Perl Наследование - Кто вызывающий родительский класс
Inherited.pm:
package Inherited;
our @ISA = qw(BaseClass);
sub new {
SUPER::new();
}
BaseClass .pm
package BaseClass;
sub new {
$a = caller(0);
print $a
}
Теперь у меня есть еще один класс (MyClass.pm), который делает:
MyClass.pm:
$obj = Inherited->new();
Отпечаток Inherited. Но мне нужно MyClass быть напечатанным заявлением.
Может кто-то, пожалуйста, помогите мне решить, как это решить?
Я не понимаю, почему вы ожидаете этого. 'Inherited' является вызывающим. Вы можете проверить 'new()' 'Inherited', а затем передать эту информацию. – Cfreak
@Cfreak: спасибо за ответ. Я согласен, что переход через аргумент является решением, но есть ли другой способ найти вызывающего родительского класса. В моем реальном сценарии мне нужна такая функциональность без прохождения аргументов. – sundar
Возможно, вы сможете использовать функцию отслеживания стека 'Carp' для поиска по всему списку вызывающих абонентов (' Carp :: longmess() '), но это не отличное решение. Взгляните на модули 'Class :: *' на CPAN. Там может быть более элегантное решение. – Cfreak