http://www.perlmonks.org?node_id=437076


in reply to Re: For clarity and cleanliness, I'd recommend...
in thread looking for a good idiom: return this if this is true

I agree with you. I would certainly never recommend that people write:
if ($result = thatroutine()) { return $result; }
But, as your while-based variant shows, non-constant assignments in a conditional are always fine if you're declaring the lvalue variable at that point:
if (my $result = thatroutine()) { return $result; }
In such cases, the = must be intentional, since == on a newly-created variable doesn't make any sense.

As for your alternative suggestion, I don't feel it's a clear or as clean as using an if, because the use of a while implies looping behaviour, which the return undermines in a not-entirely-obvious way. That could be especially misleading to subsequent readers of the code if the number of statements in the while block later increases, pushing the return away from the loop keyword it's subverting.