IMHO stay away from can(). It is 'wrong' frequently enough to not be worth it. 'wrong' in quotes because as other people noted, the behavior is predictable but not DWIM. It will have undefined behavior if you are using AUTOLOAD as well, if you are binding subs at runtime onto packages. You may or may not have bound a sub to a package when can is called. You can work around this by calling $ob->foo, $ob->can('foo') so the AUTOLOAD always runs, but then if $ob->foo has side effects .. be afraid.
-jackdied