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

-- 
Kevin Pfeiffer

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

Reply via email to