http://qs321.pair.com?node_id=267726


in reply to Re: "Useless use of private variable in void context"
in thread "Useless use of private variable in void context"

To clarify, using your method, do I want to have the length error appear physically before/after the error in question - or numerically?

Also, how is this possible?

Useless use of private variable in void context at beta.cgi line 2766. Useless use of length in void context at beta.cgi line 2766.

The 'length' line of code is one line before the GeneratePassword() line, yet they show up as the same line in the error? Is this because the perl interpreter has simplified them into one line of code?

However, if I place the 'length' line on the very next line after the GeneratePassword() line, I get the following (this is what I'm looking for, correct?

Useless use of private variable in void context at beta.cgi line 2766. Useless use of length in void context at beta.cgi line 2767.

So using this method, does it not point to the line my $generated_password = GeneratePassword(); as the culprit?

Replies are listed 'Best First'.
Re: Re: Re: "Useless use of private variable in void context"
by BrowserUk (Patriarch) on Jun 20, 2003 at 22:18 UTC

    As a pure guess, check the line before the GeneratePassword() line and see if you haven't type a comma (,) on the end rather than a semi-colon (;)?

    this is what I'm looking for, correct?

    Essentially yes. I would now move slowly backwards through the code until the line number becomes 2765.

    At that point, you wil have found the limit of the code that perl is taking as being "one line". You can then start looking for things like commas instead of semicolons, unclosed ""s or ''s etc. try commenting out the whole of th e previous line. Does the line number change then?


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller


      Okay, I should have been able to start deducing the comma thing by that point, too. I'm not sure why I was so oblivious to it. I did find the culprit however. I had nailed the problem down to 20 lines of code and your comment about a comma (makes absolute sense) lead me to the precise line that was glitching.

      I'm embarrassed to admit this, but the following is the problem that was tripping me up. Note that the code has behaved exactly as wanted and expected for over a year with this line in it - go figure!

      Problematic line:

      if (defined($duplicate_email_address), defined($matched_uid))

      Obvious to anyone with a brain and a set of eyes (except myself apparently), the problem with the above line is that there is a comma where the && operand should be.

      All I can offer in my defense is that I never suspected a problem like that because I'd have expected it to cause a syntax error or prevent compiling.

      I can also now recall the exact step that lead me to this problem over a year ago when I wrote this new batch of code. I had copied the contents of something like my ($foo, $bar, $blah) = $sth->fetchrow_array; and then used that in a conditional and never went back to modify the syntax.

      This was the last thing I was investigating. Every time I went back to check this code and see if I could find the cause of that error, I was looking for things more like a variable that was being defined but never used or something. Gah! So frustrating!

      On a positive side, I rarely make the same mistake twice and I learned a thing or two from this thread. Thanks again, monks.

        ++ for letting us know the resolution.

        On the comma thing. I have a habit of starting out with a lines like

        $i++ if $some_condition; #or push @a, 'fred' while @a < 10;

        And then realising that I need to do something else in the if or while and so instead of restructuring the line to the

        if(..) { ....; ....; } or

        while( ... ) { ...; ....; }

        I do

        $j-- , $i++ if $some_condition; #or print scalar @a , push @a, 'fred' while @a < 10;

        This is usually a temporary step while I try something out or when debugging, but I've been bitten enough times by the "comma thing" to recognise the symtoms.


        Examine what is said, not who speaks.
        "Efficiency is intelligent laziness." -David Dunham
        "When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller


      it must be somewhere else in the code. I got the same error in the following line chop($fai_in) if(length($fai_in) > 0); when I comment this line got the error in next line. The problem was however was in the following line which missed the brackets while($cust_id, $field_association_id = $sth->fetchrow_array()) which should be while(($cust_id, $field_association_id) = $sth->fetchrow_array()) it solved the problem