You've got the right idea, but you're looking for the errors
in the wrong place. $@ is for
eval errors, not run-time
errors. Those are reported in $!, or $ERRNO if you're using
English.
If you fix that, $! is "Invalid argument". I presume that
is attributable to the "Listen => 5" parameter, because when
that's removed, it works fine.
The "Listen" parameter is to define how many pending
connections you want to have, but if your process is
attentive enough and accepts them as soon as connections
are initiated, the default value should be fine (which is,
I believe, 5 anyway).