The problem is it doesn't seem to be waiting until it times out. It doesn't wait at all in fact. This is very odd, because if I implement a loop as you suggest, getlines does indeed gather all the lines of data, but the problem at that point is that it DOES time out, and I'm unable to execute the next command (logging off gracefully). I think if I rewrite the loop differently I might be able to get your approach to work.
I should explain myself better. If you log directly into the element and issue the command manually, you get 39 lines of output in less than 1 second. There may be a tiny delay after groups of lines scroll by, but it's barely perceptible to the human eye. Apparently getlines is seeing it, however. It stops gathering data into the array and I am required to issue a new getlines to retrieve the rest of the data. This doesn't make sense to me, and it's even more confusing that when I loop it as you have shown above, I get a timeout after exactly as many seconds as specified (1 second in your example, 100 seconds if I change it to 100). So, timeout is working like this. But, if I just say:
@lines = $connect->getlines(Timeout => 100);
Then what I end up with is the first 17 lines out of 39 - every time. Changing the timeout has absolutely no effect. Weird huh?