in reply to Re: How to tell methods exist in a package
in thread How to tell methods exist in a package

This will however not show up inherited methods. Which can be the desired behaviour in certain cases of course.

use strict; use warnings; if (exists &FOOBAZ::bar) { print "bar exists in foo\n"; } if (FOOBAZ->can("bar")) { print "FOOBAZ can do bar\n"; } package FOO; sub bar { } package FOOBAZ; use base("FOO");

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Brian W. Kernighan

Replies are listed 'Best First'.
Re^3: How to tell methods exist in a package
by jeanluca (Deacon) on Nov 21, 2005 at 17:36 UTC
    What if the package is; $val = "FOO" ;
    This doesn't work: if (exists &$val::mySub) {...}

    Thanks
    Luca

      No, but this does:

      $val="FOO"; $method="${val}::mySub"; if (exists &$method) {...}

      Also,

      if ($val->can("mySub")) { ... }

      works (with the aforementiond behavioural differences of course).


      Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Brian W. Kernighan
        very nice!!!, I prefer the one with can(..)!!

        Cheers
        Luca