You could just say $ret ||= (foo())[0]; instead.
In reply to Re: Why are "a ||= b" and "a = a || b" different? by ambrus in thread Why are "a ||= b" and "a = a || b" different? by saintmike