in reply to File Access for child process

my $oldfh = select STDERR; local $| = 1; select $oldfh;

This is superfluous as the STDERR stream is unbuffered.

my $run = "perl /webRoot/apps/startPipe.pl -f $dest_file -j $job_ ++ID -c $created -t $job_type $adv_opts"; `$run`;

You have forked a new process and now you are using backticks in void context which forks another process and starts a shell to run your command and returns the STDOUT of that command. Just use exec:

exec 'perl', '/webRoot/apps/startPipe.pl', '-f', $dest_file, '-j', + $job_', '+ID', '-c', $created, '-t', $job_type, $adv_opts;