in reply to User defined function in while loop

Yes, you must provide an expression that returns a true or false value, and sub calls are expressions.
while (more(...)) { ... }
while (!done(...)) { ... }
while (my $item = get(...)) { ... }