Jenda Krynicky <[EMAIL PROTECTED]> wrote:  From: hOURS 
>     Hi,
>  I wrote to the list with this issue before and got some suggestions,  but 
> nothing worked. I ended up shelving it, but now would like to try  again.
> I have a thousand scripts I'd like to check for syntax  errors. (Long story 
> that.) All I need is a list of which ones have  errors.
>           Some code suggested by John seemed very promising:
>       my $return = do 'PossError1.pl';
>  $return has a value of 1 if the syntax is fine, and the error message  
> otherwise. My problems come when I loop. When I try:
>           for($number = 1; $number <1000; $number +=1) {
>         $progname = "PossError" . $number . ".pl";
>         my $return = do  $progname;
>         print "$return\n";
>       }
>  I get two difficulties. 1) It doesn't do all one thousand scripts. For  some 
> reason it decides nine is plenty. I see nine 1s on my screen and  the 
> computer thinks it's done. 2) If one of the scripts has an error,  it won't 
> even do nine. If the 7th one has an error I'll see 6 1s, an  error message, 
> and then the program hangs.
>           Any suggestions?
>       Fred

There are two problems with this implementation.

First it doesn't check the syntax, it executes the scripts!
And second it (tries to) executes the scripts all in one process. So 
whatever changes in global data does one script make, the later ones 
see.

I think you want something like this:

for my $number (1 .. 1000) {
 my $progname = "PossError" . $number . ".pl";
 if (!-e $progname) {
  print "$progname doesn't exist!\n";
  next;
 }
 my $return = `perl -c $progname`;
 if ($return =~ / syntax OK$/) {
  print "$progname is OK\n";
 } else {
  print "$progname has errors\n";
 }
}

HTH, Jenda
    
    
    
  Thanks Jenda,
  I definitely do just want to check syntax and not execute the scripts.
    
  I ran your code.  I think we're getting close.  Here's what happened:
  For the first 64 scripts, I got either a syntax OK message or an error  
message, followed, in all 64 cases, by the "has errors" print  out.  The 
remaining 936 scripts all gave just the "has errors"  print out.  Why would the 
program make that choice (the else  portion of the if/else) every time?  Only 
about 5% of the scripts  have errors.  I happened to know in advance that #17 
was the only  one amongst the first 20 with an error.  There seemed to be 4  
amongst those first 64 scripts.  But even the 60 that gave me a  'syntax OK' 
message followed it up with the "has errors" choice.   I thought perhaps that 
second $, between the slashes, in the line:
   if ($return =~ / syntax OK$/) {
     shouldn't be there, (after all it doesn't show up on my screen) but 
deleting that had no effect.
    
  I'd rather not print out the syntax OK or error message.  It's  redundant 
info with the subsequent if/else choice.  In any event I  can't imagine why the 
first 64 behaved differently from the last 936,  though I wouldn't be surprised 
if 64 being a power of 2 is part of the  explanation.
  Oh let me also mention I'm using Windows, in case that matters.
    
  Thanks much!
  Fred
    
 
---------------------------------
Now that's room service! Choose from over 150,000 hotels 
in 45,000 destinations on Yahoo! Travel to find your fit.

Reply via email to