必ず中でreturnする、という条件なら

while (my($x, $y) = @_) {
...
}

とする手があるな。letっぽく。