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]