Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: package variables turning suddenly to undef and back again depending on subfunction call

by flexvault (Prior)
on Feb 25, 2013 at 18:55 UTC ( #1020552=note: print w/ replies, xml ) Need Help??


in reply to package variables turning suddenly to undef and back again depending on subfunction call

tobias_hofer,

Put an extra set of brackets in the script. '{' after the package name, and a '}' the end of the script. Now, everything is in scope, so nothing should be 'undef' unless you didn't define them.

Hope this helps...Ed

"Well done is better than well said." - Benjamin Franklin


Comment on Re: package variables turning suddenly to undef and back again depending on subfunction call
Re^2: package variables turning suddenly to undef and back again depending on subfunction call
by tobias_hofer (Friar) on Feb 26, 2013 at 07:56 UTC

    I gave a try but there is no change in the debugger-view. Guess its up to the eclipse-plugin or debugger as using print statements is working fine.

    Thanks a lot!
    Tobias

      tobias_hofer,

      Just a little trick on using 'print' statements and debugging. (Note: I'm using *nix boxes) At the beginning of all of my packages, I define (actually copy the code) the following:

      ###################################################################### +# # DEBUG ==0 {no debugging}, ==1 {debugging}, >=2 {greater debugg +ing} ###################################################################### +## # our $Debug = 0; our $DLOG; ## Production our $Debug = 4; our $DLOG; ## Testing if ( $Debug ) { my $logFile = "MyLog_$$"; ## Good for multi-user testing open($DLOG,">",$logFile) || die "Cannot open $logFile:$!"; print $DLOG "############################# ".scalar localtime() +."\nStart. . . \n"; } else { open $DLOG, ">>", "/dev/null" ); }

      At different places in the code, if I have something going wrong, I insert statements like:

      for my $key { sort keys %Hash ) { ... do something ... if ( $Debug >= 4 ) { print $DLOG "Hash:\t$key\t|$Hash{$key}|\n +"; } }
      Once you get it working, all you have to do to stop printing to the log, is change the '4' to a '5' and the print won't be executed. When computers were much slower than today, I used to take them out for production, but now I leave them in and change the global '$Debug' to '0'.

      The advantage to doing this is if you have a production problem, you can turn the debugging on and get some help finding the problem. :-)

      There have been times when I've had a debug statement after every line of code to figure out what was going wrong. It's usually a typo or some other simple mistake, but without the debug info, you just don't see it. ( I always use strict and warnings, but sometimes things get through. )

      Always name the output so you can use your editor to search on the print statement. Notice that I put '|' around the variables to help see if it's undefined or "". You can also print to STDERR when your getting warnings. One time I was getting a couple 100K warnings for a script and by printing to STDERR, I was able to see the start and end of the problem in the loop. If your not testing a multi-user or multi-tasking package you don't need the '$$'. That's just so you don't have to lock/unlock the log file.

      Good Luck...Ed

      "Well done is better than well said." - Benjamin Franklin

        Hello Ed,

        I am doing almost the same, I wrote a class for error logging and use it extensively. For my module now I will give a try with your '$Debug' variable to drive the error-logging mechanism as its a fast way for exploring the data ;-)

        Thanks a lot!
        Tobias

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2015-07-06 04:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (70 votes), past polls