for my $x ( reverse 0 .. 2 ) { for my $y ( reverse 0 .. 2 ) { open my $pipe, '-|', 'prog name', '-f', "file_${x}_$y.ext" or die "Cannot open pipe from 'prog name': $!"; open my $out, '>', "tracker_$x$y.log" or die "Cannot open 'tracker_$x$y.log': $!"; print $out $_ while <$pipe>; close $pipe or warn $! ? "Error closing 'prog name' pipe: $!" : "Exit status $? from 'prog name'"; } }