Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Re (tilly) 2: The Marcel Perl Questionnaire

by tilly (Archbishop)
on Feb 24, 2001 at 22:43 UTC ( #60668=note: print w/replies, xml ) Need Help??

in reply to Re: The Marcel Perl Questionnaire
in thread The Marcel Perl Questionnaire

That is a bad habit, which if you are just starting you would be advised to break right now.

Please see my comments in the thread starting at $_ haters anonymou for details of why.

For the record, I am still not confident that I know all places where $_ will be used unexpectedly to me. You should not stomp over it thoughtlessly. Instead leave $_ alone before you have to ask how your map statement wound up eating up the array...

  • Comment on Re (tilly) 2: The Marcel Perl Questionnaire

Replies are listed 'Best First'.
Re: Re (tilly) 2: The Marcel Perl Questionnaire
by premchai21 (Curate) on Feb 26, 2001 at 00:26 UTC

    As far as $_, I think that the problem of the many uses can be overcome by simply doing

    { local $_; # stuff... }

    I haven't seen this do anything too weird, and it provides a good way to overwrite $_ temporarily. It sort of reminds me of elisp's (save-excursion ...) Anyway, here's my answers to the questionnaire -- favorites are first.
    (Least) Favorite Perl Instructionlocal; resetSee above. Why reset? Too dangerous, especially when you've got tons of single-char vars.
    (Least) Favorite Looping Mechanism{}; forNaked blocks give you more flexibility. for just seems useless to me.
    (Least) Favorite ModuleData::Dumper;Dump those objects! No least favorite -- I sort of like them all.
    (Least) Favorite Special Var$_; $]$_ is so useful. $] is not.
    Favorite Var TypetypeglobVery obfuscatable.
    (Least) Favorite Command Line Switch-e; -U-e allows me to do one-liners. -U does unsafe things.
    Favorite Pragmause strict; no strict "refs";Good for bugcatching, except when I want to use symbolic references.
    Favorite Regexp {Modifier,Metachar}i; \QYes to i! Too much work to manually decapitalize all the time. \Q useful for when arbitrary data comes in which you need to match.
    Favorite Descriptive Var Name%zNot very descriptive, but I like it nonetheless.
    Favorite HERE doc delimiterprint;Or some other command...
    Favorite FilehandleFOOShould be obvious why...

      The majority of the problems can indeed be solved that way. (Though good luck if you forget a local anywhere.) But there are more subtle maintainability issues with implicitly passing data in global variables. Code that is explicit about where data that is being acted on came from is better than code which hides that information elsewhere.

      This is also why I dislike local. Oh, I know when to use it and I do use it correctly. But I prefer not needing it. Perl has too many scoping mechanisms whose interactions are too baroque. Rather few people really understand it, and when people are working with interfaces they don't understand they get confused and make mistakes. (Often without knowing that they made mistakes.) As the documentation says, local is probably not what you wanted to use, my is generally more appropriate...

        Good point. However, I still disagree. You're right about the unmaintainability (though it fits in nicely with some of my patterns of obfuscation). I prefer local being there though -- I think that it has perhaps more uses than my does.
        Then again, TMTOWTDI... take your pick.

        Drake Wilson

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2021-04-13 09:52 GMT
Find Nodes?
    Voting Booth?

    No recent polls found