The algorithm is a simple symbol table search in method resolution order.
If the method is not in the symbol table (perhaps it's loaded with AUTOLOAD, or otherwise loaded after the ->can call) it won't be found. If it's loaded via AUTOLOAD, the module itself will need to overload can so it can answer effectively for those functions; this is somewhat tricky to get right, as you need to allow the search to continue further up the tree as necessary.
You mentioned later that ->can is not seeing your C++ functions. Unless these are exposed to the Perl level, they won't be in the symbol table; but then again, you shouldn't be able to call them from Perl, either, so finding them with ->can is simply wrong. If this is the case, you'll need to elaborate more as to what's going on.
In reply to Re: Workings of UNIVERSAL::can
by Somni
in thread Workings of UNIVERSAL::can
by geoffleach
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |