in reply to Re: How to map function name to coderef?
in thread How to map function name to coderef?

Is there a way to do this with strict enabled?

Replies are listed 'Best First'.
Re^3: How to map function name to coderef?
by ikegami (Patriarch) on Jan 07, 2012 at 00:39 UTC

    Yes, there are ways of fooling strict. It's simpler and clearer to just turn it off in the code in question.

    my $func_name = 'f'; my $cr = do { no strict 'refs'; \&$func_name }; say $cr->();
Re^3: How to map function name to coderef?
by GrandFather (Saint) on Jan 07, 2012 at 00:36 UTC

    You can use can to return a coderef:

    use strict; use warnings; my $doFoo = main->can ('foo'); print $doFoo ? $doFoo->() : "Can't foo\n"; sub foo { return 1; }

    Prints:

    1
    True laziness is hard work
      can searches the inheritance tree. It should be used for methods, not functions.

        And yet can works, and as there is no @main::ISA, and you shouldn't pollute UNIVERSAL,  main->can( $foo ) is perfectly legit