Dave Gray <[EMAIL PROTECTED]> wrote:  On 1/8/07, hOURS  wrote:
> Hi everyone,
>  Jay offered me the following code to help with something. I don't  undertand 
> it, but tried to use it anyway to see if it would work. The  computer told me 
> there was a syntax error in the area I highlighted in  color. I can't find it 
> - maybe that's because I don't understand the  code fully, but if anyone can 
> show me where it is I'd be grateful.
>
> Jay Savage  wrote:my $timeout = 3600; # 1 hour
> eval {
>     local $SIG{ALRM} = sub { die "longRunningModule timed out\n" };
>     alarm $timeout;
>     require longRunningModule;
>     alarm 0;
> }

in case this isn't fixed yet, eval blocks need to be ended with a
semicolon, like eval { };
    Awesome.  That semi-colon did the trick.   I now have syntax-error free 
code.   But it doesn't work like I'd expect.   I've tried to de-bug, but not 
having written this myself - well I just  can't find the problem.  Can anyone  
help?
      Some modifications I made: I  changed the names of the programs being 
tested to fit what I had.  I reduced the alarm time from one hour down  to a 
few seconds.  I included statements  to print out error messages.  (The  
original if and else blocks just had comments.)  And lastly, for my test, since 
I'll be checking a large number of  programs for infinite loops, I encased this 
code in a for loop.  As you can see below, it executes the code 4  times, 
testing the programs, infinite1.pl, infinite2.pl, infinite3.pl, and  
infinite4.pl.  Those are all very simple  programs.  1, 2, and 4 are identical:
      $x = 3 + 4;
      print $x;
      Running them gives the expected 7  on the screen.  For infinite3.pl I  
encased that in an endless loop:
      while (1) {
         $x = 3 + 4;
         print $x;
      }
      Running this gives the expected  never-ending stream of 7's.
      Here's the finished code for error  checking:
      for($number = 1; $number < 5;  $number +=1) {
         $ProgramName = "infinite" . $number . ".pl";
         eval {
           local $SIG{ALRM} = sub { die "$ProgramName timed out\n" };
            alarm 9;
            require $ProgramName;
            alarm 0;
         };
         if($@) {
           if($@ =~ /timed out/) {
            print "timeout\n"; # timeout
           } else {print "some other error\n"; # some other error
          }
         }
      }
       
      So when I run this code and check those four little  programs for errors 
I get the following:
      some other error
      some other error
      some other error
      some other error
      
  
      I don't know why I get 4 errors and  not one, and why they're of the 
wrong type.   Any help would be appreciated.
      Thank you,
      Fred Kittelmann
      
 
---------------------------------
Have a burning question? Go to Yahoo! Answers and get answers from real people 
who know.

Reply via email to