in reply to Re^6: I don't understand UNIVERSAL::DOES() (import)
in thread I don't understand UNIVERSAL::DOES()

The last paragraph was the most important, and it wasn't addressed. My fault, I didn't explain myself. Consider

{ package Foo; sub DOES { my ($self, $role) = @_; return 1 if ...; return $self->SUPER::DOES($role); } } Foo->DOES(...); # Line "A" UNIVERSAL::DOES('Foo', ...); # Line "B"

Unless DOES does something non-intuitive, line "A" results in an infinite loop.
Unless DOES does something non-intuitive, line "B" doesn't call the overridden DOES.

Do we really want DOES to be that special? Having a function does (which calls DOES when appropriate) would avoid all this complexity.