On 1/11/07, hOURS <[EMAIL PROTECTED]> wrote:
[snip]
      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


Fred,

My best guess is that require is failing. See perldoc require for all
the reasons that might happen, but the two most likely culprits are
that your "modules" aren't in @INC or that they don't return a true
value as their final statement. Try adding

   1;

to each of them as the last line of the file (again, read the require perldoc).

Also add some more debugging code.

   require $ProgramName or die "$!\n";

would be a good start. Then you can examine $@ to see why the eval failed.

HTH,

-- jay
--------------------------------------------------
This email and attachment(s): [  ] blogable; [ x ] ask first; [  ]
private and confidential

daggerquill [at] gmail [dot] com
http://www.tuaw.com  http://www.downloadsquad.com  http://www.engatiki.org

values of β will give rise to dom!

Reply via email to