in reply to Re: Re: Re: can('SUPER::defaults')
in thread can('SUPER::defaults')

I'd like to make you feel better by disagreeing, as oddly as that sounds.

It *cannot* be resolved at compile time, because method calls are not resolved at compile time. (That's why prototypes don't work on methods, for example.)

My guess, based on a very quick reading of gv.c (Perl_gv_fetchmeth), is that methods care about their stashes. In other words, the package where a method was defined matters, because that's the first place Perl looks when it's trying to resolve something like this (a variable name, a method call). gv_fetchmeth() attempts to find an appropriate method to call. When '::SUPER' is found, it looks in @ISA available in the current stash.

That's modifiable at run time.

I'm not completely convinced my explanation is right, but I will stake my autographed CowboyNeal photo that it's not compile time. (Now I sit back and wait for Dominus to whack me with a stick of -1, Pedantic and Slightly Incorrect. ;)