Well, then, we're back to my other explanation. You're not calling can("SUPER::bar"). You're calling SUPER::can("bar"), so you're finding yourself. Don't do that. Stop saying SUPER::can. It means practically nothing other than "can", unless you have a "can" method in the current class.