I think the problem is that you're using the same Net::SSH2 object ($ssh) to connect to different hosts, though it's not exactly clear to me that this *ought* to be a problem at all.
in reply to Net::SSH2 woes
Try the below rendition (untested). It creates a new Net::SSH2 object for each host.
Perhaps the undef $ssh; is unecessary.
my $hf = 'list.txt';
my $user = 'user';
my $pass = 'pass';
open (L,"<$hf") || die "$!";
my $ssh = Net::SSH2->new();
print "Connecting now..\n";
$ssh->connect("$_") || warn "$!";
my $chan = $ssh->channel();