Is there some reason why 'can' does not allow a class name,
but (silently) insists on an instance?
I wanted to do this :
sub Construct
{
my $class = (caller(0))[0];
if ($class->can('Something'))
{
...
}
else
{
...
}
}
can just returns undef in this case, even if class has method in
question.
Anyone object to a patch?
p5p-msgid: <
199611211407.OAA14645@pluto>
private-msgid: <
199611211547.PAA15878@pluto>
SV *rv;
GV *gv;
CV *cvp;
+ HV *pkg = NULL;
if (items != 2)
croak("Usage: UNIVERSAL::can(object-ref, method)");
name = (char *)SvPV(ST(1),na);
rv = &sv_undef;
- if(SvROK(sv) && (sv = (SV*)SvRV(sv)) && SvOBJECT(sv)) {
- gv = gv_fetchmethod(SvSTASH(sv), name);
+ if(SvROK(sv)) {
+ sv = (SV*)SvRV(sv);
+ if(SvOBJECT(sv))
+ pkg = SvSTASH(sv);
+ }
+ else {
+ pkg = gv_stashsv(sv, FALSE);
+ }
+
+ if (pkg) {
+ gv = gv_fetchmethod(pkg, name);
if(gv && GvCV(gv)) {
/* If the sub is only a stub then we may have a gv to AUTOLOAD */