是否有一种方法来确定一个子程序是作为一个方法(使用@ISA探测)调用,还是作为一个普通的子例程调用?可能有某种扩展模块-超级呼叫者()
例如,给定
package Ad::Hoc;
sub func() { ... }func()如何区分以下两个调用:
Ad::Hoc->func; # or $obj->func
Ad::Hoc::func('Ad::Hoc'); # or func($obj)(我知道,这样做的愿望很可能是设计不良™的一个迹象。)
发布于 2013-08-13 19:59:22
package Ad::Hoc;
sub foo {
my $self = shift;
if(ref($self) ne 'Ad::Hoc') {
unshift @_, $self;
undef $self;
}
if($self) {
# I'm a method
} else {
# I'm a sub
}
}https://stackoverflow.com/questions/18217865
复制相似问题