Sorry for the delayed reply. I only had time to look at this now. *caveat* I haven't had to do pty-related coding in a while, so my knowledge of the 'tricks' is hazy.

I looked over the code in IO::Pty::Easy and IO::Pty, and it looks like it always handles the case where there is no tty associated with the process. What I would probably do is run the program using strace (ie, have xinetd call a shell script which runs "strace <perl-script> >& /tmp/data.out" And look for unexpected system call failures.

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other