STDIN должен быть закрыт при демонизации из соображений безопасности.
Вам нужно создать сокет (или, возможно, fifo) и прочитать из него. Я бы предложил доменные сокеты Unix , см. Главу 17.6 Perl Cookbook .
Трудно быть более точным, поскольку это зависит от того, что делает ваш демон.
Обновление:
На самом деле, теперь, когда я думаю об этом, если программа запускается на * nix-боксе, вы можете оставить свой скрипт таким, какой он есть, и использовать вместо него inetd . Inetd прослушает для вас сокет и запустит ваш демон при соединении, соединяя сокет и STDIN / STDOUT в вашей программе. У меня нет опыта использования inetd с доменными сокетами, но поверхностное поиск в Google указывает, что по крайней мере некоторые реализации поддерживают доменные сокеты.