http://www.perlmonks.org?node_id=992158


in reply to Getting variable sized reapones using Net::SSH2

It seems that the read method is exact; if you're blocking, then it will wait for as many chars as you ask for. There is an undocumented method in Channel called READLINE. Changing your last 3 lines thusly:
my @buf; print $chan2 ("ls -l\n"); @buf = $chan2->READLINE(); print @buf;
and keeping the buflen large (at 10K) gave me the results without hanging.

fnord