RULE: while doesn't assign any variables (like foreach ) it's a boolean check alike if(CONDITION) { DO LOOP }
Some operations assign automatically to some vars (side-effect) and return true on success. E.g. regexes setting $1 etc can be combined with a boolean check.
Some like <FH> do this only insidewhile(<FH>) context for exceptinal DWIM