in reply to Re: Prohibiting redeclaration of lexicals in inner scope
in thread Prohibiting redeclaration of lexicals in inner scope

Note that this took place within a single procedure and yep the variable names were nice and descriptive. The problem is that I didn't spot the extra 'my' lower down and so missed the reclaration.

I cannot imagine a case where I personally would want to use this language feature and so would like to be warned about it whenever I do this in my code.

Comments about variable naming etc do not help me.

Thx

  • Comment on Prohibiting redeclaration of lexicals in inner scope

Replies are listed 'Best First'.
(jeffa) 3Re: Prohibiting redeclaration of lexicals in inner scope
by jeffa (Bishop) on Mar 31, 2003 at 16:31 UTC
    "I cannot imagine a case where I personally would want to use this language feature ..."

    Well, for one, this feature is extremely useful when 'slurping' an entire file into a scalar. To do this, you must set $/ to an undefined value, but doing that could break client code. By only 'reseting' that variable inside a 'bare block', you guarantee that you will not break someone's client code that might use yours. In action, instead of using:

    my $data; while (<FILE>) { $data .= $_; }
    I can safely 'turn off' $/ temporarily via local:
    my $data = do {local $/ = undef;<FILE>}; # $/ contains it's original value (\n) now
    But ... i have been coding Perl for a good solid 4 years now. Your milleage may (and will) vary. I hope you decide to stick around, because we have lots of useful information for you. We just sometimes have to question why someone would even want to do something like this, that's all. :)

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)
    
Re^3: Prohibiting redeclaration of lexicals in inner scope (coding habits?)
by Aristotle (Chancellor) on Mar 31, 2003 at 23:19 UTC

    Not to make any assumptions, but how long is the sub, where did you originally declare the variable, how far away is its first use, and how far away the redeclaration? I'm just curious because I've never come across this problem and can't imagine it taking me hours to spot.

    I generally declare variables right when I use them the first time, and scope them tightly, trying to declare them in the innermost of the blocks they're used in. My code blocks are as short as I can keep them - a screenfull is long, more than two is under most circumstances too much. As a result, there's very rarely any occasion where a variable name is declared further than a screen from where it goes out of scope.

    For all intents and purposes these habits make it impossible to blunder in ways like this. Of course I may be way off mark, but it simply puzzles me that anyone would have this kind of trouble. My personal experience suggests it's just not possible to overlook duplicate declarations with habitual tight scoping and late declaration. YMMV of course.

    Makeshifts last the longest.