Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: CamelTrouble

by hossman (Prior)
on Apr 10, 2004 at 20:48 UTC ( #344164=note: print w/replies, xml ) Need Help??


in reply to CamelTrouble

  • Nice piece of code
  • Everythime I pick up a dude, I see...
    Use of uninitialized value in subtraction (-) at CamelTrouble.perlmonk +s343196.pl line 286. Use of uninitialized value in addition (+) at CamelTrouble.perlmonks34 +3196.pl line 286.
  • My camels seem to have no problem walking through walls, which makes avoiding the hazards to get to the Oasis after picking up all the dudes very easy.

Replies are listed 'Best First'.
Re: Re: CamelTrouble
by mawe (Hermit) on Apr 11, 2004 at 09:14 UTC
    Everythime I pick up a dude, I see... Use of uninitialized value in subtraction (-) at CamelTrouble.perlmonks343196.pl line 286. Use of uninitialized value in addition (+) at CamelTrouble.perlmonks343196.pl line 286.
    That's right. It's one of the bugs I mentioned in the description. Unfortunately I don't know how to fix it. Please help :-)
    My camels seem to have no problem walking through walls, which makes avoiding the hazards to get to the Oasis after picking up all the dudes very easy.
    As I explained above, the camel doesn't walk through the wall, it jumps over it ;-)

      Well, I haven't read all of your code, so I can't say authoritatively that I know exactly what the bug is, but i have read the good_ones_go funtion, and fortunately your program is nice and moduler, and your variables names are fairly clear, (the only thing i needed to look up anywhere else in the script is what "@good_ones" contains, and what you pass to "good_ones_go" when you call it) so I think I have a pretty good idea what's going wrong.

      Rather then just fixing it for you, let me ask you a question, what happens if you run this script....

      # perl use warnings; use strict; my @good_ones = (100..110); foreach (0..$#good_ones) { print "$_: $good_ones[$_] ..."; if (rand() < 0.5) { splice @good_ones,$_,1; } print "($#good_ones)\n"; }

      (PS: you may be tempted to "fix" your script by adding a single call to "last;" ... I wouldn't recommend that. Consider what would happen if the camel moves one pixel, and that puts him close enough to pick up two monks.)

        Thanks for the snippet! And thank you for NOT telling me how to fix it, I love sleepless nights ;-)
        After this night I read Vautrin's reply (after, very clever :-/) and tried this
        ... foreach (0..$#good_ones) { if (defined $good_ones[$_]) { print ... ...
        The error messages are gone. Is this the solution? Maybe I'm silly, but I still have no idea why the code produced an error massage at all.

      If you use warnings; you can use no warnings qw(foobar); in a block to turn off the foobar type warning. So you could do:

      no warnings qw(uninitialized);

      Or you could check your code, i.e.:

      # so it's not undefined: $foo = 0 unless (defined $foo);

      I put a big write up on my scratchpad for somebody about using use warnings for fine grained control. Check it out if you're interested.


      Want to support the EFF and FSF by buying cool stuff? Click here.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (2)
As of 2020-10-25 23:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (249 votes). Check out past polls.

    Notices?