We need to ensure $sock_pkg is preserved outside of the loop.
The variable passed to "for" or "foreach" is implicitly local
and restores the previous value when the loop exits. This is
documented in the perlsyn manpage in the "Foreach Loops"
section.
Fixes: ea1b6cbd422b ("daemon: allow using IO::Socket::IP over INET6")
$o{Local} = delete $o{Peer};
} else {
# both work for IPv4, too
- for $sock_pkg (qw(IO::Socket::IP IO::Socket::INET6)) {
+ for (qw(IO::Socket::IP IO::Socket::INET6)) {
+ $sock_pkg = $_;
eval "use $sock_pkg";
$@ or last;
}
$o{Listen} = 1024;
my $prev = umask 0000;
my $s = eval { $sock_pkg->new(%o) };
- warn "error binding $l: $!\n" unless $s;
+ warn "error binding $l: $! ($@)\n" unless $s;
umask $prev;
if ($s) {