in reply to sending variables to a script running in a bg

Here is a simple mechanism, assuming you are running on UNIX, use a named pipe. Create the pipe using mkfifo(1) and just treat it as you would any other file.
If you open it (for read or write) when there is no one at the other end then you will block, but you can synchronise using a second empty file. When you want the background job to proceed then just touch the sync file:
my $syncfile = 'sync.fred'; my $start = (stat $syncfile)[9]; while ($start == (stat $syncfile)[9]) { sleep 1; } print "Now we can read the pipe\n";