use warnings;
use strict;
When you do, you get:
$ ./gash.pl &
[1] 7317
$ kill -HUP 7317
SIGHUP handler "ignore" not defined.
A lack of CHLD handling can cause zombies, but HUP is generated when the parent dies. This will kill the child unless HUP handling is done, in which case the orphan gets adopted by init (PID 1). For more on SIGCHLD see
perlipc and your local manpages
man 7 signal.