You will find the meaning of UTSL at http://www.dictionary.com/.
Beats me on the pipe opening issue; put $! into the message to get the system error message - and if that doesn't help, try putting this before the code;
print "strace -fae -p $$\n";
sleep 10;
When it prints the "strace" command, cut and paste the line into another window, and you will see all the system calls the program executes over the part you are interested in. There should be one that is failing (will have ESOMETHING in the last column). That should give you a hint as to what is going wrong.
$h=$ENV{HOME};my@q=split/\n\n/,`cat $h/.quotes`;$s="$h/."
."signature";$t=`cat $s`;print$t,"\n",$q[rand($#q)],"\n";