in reply to Can a while loop be stopped with "last"?

yes, last exits the innermost enclosing loop.
this is from perldoc perlfunc(ran from the command line):

The "last" command is like the "break" statement in C (as used
in loops); it immediately exits the loop in question. If the
LABEL is omitted, the command refers to the innermost enclosing
loop. The "continue" block, if any, is not executed:
LINE: while (<STDIN>) { last LINE if /^$/; # exit when done with header #... }