$ LANG=C perl -MIO::Socket::INET -e 'new
IO::Socket::INET(PeerAddr => "non.existant.host", PeerPort => 25) or die
$!'
Invalid argument at -e line 1.
This is on purpose, as when I read the code, the _error subroutine sets
$! with EINVAL and $@ with the correct error. Which nobody expects (like
the spanish inquisition), nor is documented (save a example in the
manpage that seems like a typo). From the perlvar manpage:
$@ The Perl syntax error message from the last eval() operator.
So this clearly is a bug.