Как я могу получить доступ к таблице символов для текущего пакета, в котором был создан экземпляр объекта? Например, у меня есть что-то вроде этого:
my $object = MyModule->new;
# this looks in the current package, to see if there's a function named run_me
# I'd like to know how to do this without passing a sub reference
$object->do_your_job;
Если в реализации do_your_job
я использую __PACKAGE__
, он будет искать в пакете MyModule
. Как я могу заставить его выглядеть в правильном пакете?
РЕДАКТИРОВАТЬ: я постараюсь сделать это яснее. Предположим, у меня есть следующий код:
package MyMod;
sub new {
return bless {},$_[0]
}
sub do_your_job {
my $self = shift;
# of course find_package_of is fictional here
# just for this example's sake, $pkg should be main
my $pkg = find_package_of($self);
if(defined &{ $pkg . '::run_me' }) {
# the function exists, call it.
}
}
package main;
sub run_me {
print "x should run me.\n";
}
my $x = MyMod->new;
# this should find the run_me sub in the current package and invoke it.
$x->do_your_job;
Теперь $x
должен каким-то образом заметить, что main
является текущим пакетом, и выполнить поиск в его таблице символов. Я пытался использовать благословение Scalar::Util
, но все равно выдавал MyModule
вместо main
. Надеюсь, теперь это немного яснее.
caller
. perldoc.perl.org/perlfunc.html#Perl-Functions-by- Категория - person daotoad   schedule 01.12.2009Main_Terminate
. - person Geo   schedule 02.12.2009