Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Automatically add all defined functions to your @EXPORT

by dragonchild (Archbishop)
on Jun 21, 2005 at 13:58 UTC ( [id://468674]=note: print w/replies, xml ) Need Help??


in reply to Automatically add all defined functions to your @EXPORT

As an example of what merlyn is talking about, you can do something like:
our @EXPORT = do { no strict 'refs'; grep { !/^_/ } grep { defined &$_ } keys %{ __PACKAGE__ . '::'}; };

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

Replies are listed 'Best First'.
Re^2: Automatically add all defined functions to your @EXPORT
by merlyn (Sage) on Jun 21, 2005 at 14:20 UTC
    our @EXPORT = do { no strict 'refs'; grep { !/^_/ } grep { defined &$_ } keys %{ __PACKAGE__ . '::'}; };
    Well, I was envisioning something more along the lines of:
    our @EXPORT = do { no strict 'refs'; grep { defined &$_ and not /^_/; } keys %{ __PACKAGE__ . '::'}; };
    I mean, you already have a grep there. Use it. {grin}

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

      This is an interesting style difference. I prefer putting one very specific item per map or grep. I find it makes both comprehension and maintenance easier in the long run. Maybe, this is a meditation in the making?

      My criteria for good software:
      1. Does it work?
      2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
        I prefer putting one very specific item per map or grep.

        I don't get the logic of this. (That doesn't mean you should change it, I'd just like to understand it).

        You (probably) wouldn't code:

        if( $var == 1 ) { doSomething(); } if( $var == 1 ) { doSomethingElse(); }

        Instead of

        if( $var == 1 ) { doSomething(); doSomethingElse(); }

        Or

        if( $var1 == 1 ) { if( $var2 == 2 ) { doSomething(); } }

        In preference to

        if( $var1 == 1 && $var2 == 2 ) { doSomething(); }

        (would you?).

        So why the difference about combining the conditional in grep?


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
        "Science is about questioning the status quo. Questioning authority".
        The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
Re^2: Automatically add all defined functions to your @EXPORT
by pobocks (Chaplain) on Jan 22, 2009 at 05:03 UTC

    I'm not sure where I'm missing something, but why the "do"? It makes this not work for me; I must be missing something somewhere.

    for(split(" ","tsuJ rehtonA lreP rekcaH")){print reverse . " "}print "\b.\n";
      The do is to introduce a new scope during an assignemnt. "not work for me" is rather vague - you want to elaborate, possibly with the actual error message?

      My criteria for good software:
      1. Does it work?
      2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

        Ahem. Sorry. By "not work for me," I meant "silently compiles and runs with no errors, not printing... and it stopped doing that, making me think it was a 4am transcription error or some such. Question withdrawn!

        for(split(" ","tsuJ rehtonA lreP rekcaH")){print reverse . " "}print "\b.\n";

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://468674]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2024-03-29 08:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found