in reply to Backtick caught in infinite loop

If it was me, and I like to make quick guesses, hoping for an easy solution, :-) , you might just try putting
$SIG{CHLD} = 'IGNORE';
in your code and see if that helps the main script move on.

As for the script running again on occaision, it maybe that the way you setup your argument list is being interpreted by the backticks and shell as some secondary argument. It can get tricky to pass an options list properly. You might want to investigate whether the line

my @result = `command --arg1=$num1 --arg2=file.log . . . -argLast=$nu +mLast`;
might be better setup as
my @options = qw(--arg1=$num1, --arg2=file.log, . . . -argLast=$numLa +st ); my @result = `command @options`;
It may take some experimentation to figure out the array element boundaries, it maybe that the first 2 options need to be in one array element. It can get mind-boggling, as I remember trying to figure out how to feed options to tar this way.

Finally, you may want to consider running the command with IPC::Open3, or a similar IPC module, which can separate out the stdout and stderr, giving you more clues as to what is happening.


I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

Replies are listed 'Best First'.
Re^2: Backtick caught in infinite loop
by tau1777 (Initiate) on Jun 20, 2014 at 02:22 UTC

    Thanks very much.

    I'm a total noob to perl so I'm assuming that I can just put $SIG{CHLD} = 'IGNORE', right before "my @result..." and not around the beginning of the script with

     use strict;

     use File::Basename;

    etc.
      Usually, it would go right at the top of your script, right after use File::Basename. I'm guessing it would be ok before your backtick. BTW, you might want to read "perldoc perlipc".

      I'm not really a human, but I play one on earth.
      Old Perl Programmer Haiku ................... flash japh