Keven.. This looks really good.. 

Is it the "eval" that keeps the alarm from kicking the script out of the 
loop?

I can tell I'll have some reading to do in the morning..

On Sat, 12 Jul 2003, Kevin Pfeiffer wrote:

> In article <[EMAIL PROTECTED]>, 
> [EMAIL PROTECTED] wrote:
> 
> Hi,
> 
> > I'm kind of new to Perl, so please forgive the question..
> > 
> > I'm trying to use perl to read a file and then run a program using the
> > file. I also want to use the alarm(x) function to skip to the next entry
> > in the files if it times out. Here's what Ive go so far:
> > 
> > open (TESTFILE, "< regression") || die "Can't open: regression_dgd\n";
> > open (LOGFILE, "> regression.log") || die "Can't open: regression.log\n";
> > print LOGFILE "\n\n\nStart of test run - $today1 $run\n";
> > while ($line = <TESTFILE>)
> >         {
> > alarm(62);
> >         print "Working...\n";
> >         $start=time;
> >         chomp($line);
> > $cmd = "/node.ulm_bx";
> >         $full_line = join("",$line,$cmd);
> >         $jobrun = `$run $full_line`;
> >         print LOGFILE "$jobrun";
> >         $end = time;
> >         $totaltime = $end - $start;
> >         print LOGFILE "Time for test:$totaltime sec's\n\n\n";
> >         }
> > close (TESTFILE);
> > close (LOGFILE);
> > 
> > It works fine, but when the alarm time gets exceeded, the script exits.
> > What I would like it to do is just go to the next line in the TESTFILE.
> 
> Did you look at perldoc -f alarm? I just did and was able to come up 
> with this, which I think is similar to what you want:
> 
> 
> while (my $line = <DATA>)
>         {
>         chomp($line);
>         print "Working on $line ...\n";
>         my $start = time;
> 
>                eval
>                        {
>                        local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
>                        alarm 5;
> 
>                        while(1){};      # something that lasts way too long
> 
>                        };
> 
>                        if ($@)
>                                 {
>                                 die unless $@ eq "alarm\n";   # propagate unexpected 
> errors
>                                 # timed out
>                                 print "$line timed out\n";
>                                 next;
>                                 }
>                        else
>                                 {
>                                 # didn't
>                                 }
>         my $end = time;
>         my $totaltime = $end - $start;
>         print "Time for test:$totaltime sec's\n\n\n";
> 
>         }
> 
> __DATA__
> aaa
> bbb
> ccc
> 
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to