问问题
272 次
2 回答
10
看看Devel::Caller是否有帮助。我更改了代码以func
在对象上调用,它似乎可以在我的 Mac 上使用perl
5.14.3(和 5.24.0):
called_as_method($level)
called_as_method returns
如果子例程 at$level
作为方法调用,则为 true。
#!/usr/bin/env perl
package Ad::Hoc;
use strict; use warnings;
use Devel::Caller qw( called_as_method );
sub func {
printf "%s\n", called_as_method(0) ? 'method' : 'function';
return;
}
package main;
use strict; use warnings;
Ad::Hoc->func;
Ad::Hoc::func();
输出:
方法 功能
于 2013-08-13T20:30:14.623 回答
-2
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
}
}
于 2013-08-13T19:59:22.177 回答