What is the difference between these settings?
$SIG{CHLD} = \'IGNORE\'
$SIG{CHLD} = \'DEFAULT\'
$SIG{CHLD} = \'\'
$SIG{CHLD} = undef
$SIG{CHLD} = 'IGNORE'
This is passed to the OS as SIG_IGN, which according to the OS docs, makes the child processes terminate without becoming zombies (or reporting their exit code to the parent).
$SIG{CHLD} = 'DEFAULT'
$SIG{CHLD} = ''
$SIG{CHLD} = undef
These are all the same at the OS level (they will call signal() with SIG_DFL). However some perl packages, notably AnyEvent::child, will not work when $SIG{CHLD} is set to 'DEFAULT'.