It doesn't change what was said, it appends to it: not only other conditions (alike the mentioned outer while loop condition) alter $v1, also external code that is called, so without any condition in this code section, will alter it whenever it has a condition somewhere. You don't see any condition, yet $v1 is altered due to an alias call.

For example:
Code:
alias bla { if ($read(mirc.ini,1) != $null) { blalog $v1 | echo -ag $v1 logged } }
alias blalog { if (ON == %logging) { noop } }

notice how the second $v1 in alias bla becomes the 'ON' from alias blalog.
That was what I tried to make clear.
So yes, it should use a variable.