In some languages, you can do
$a = $b OR $c OR die(\"no value\");
That is, the OR will short-circuit, only evaluating values from left to right
This should work:
$a = (($f1=func1()) ? $f1 : ($f2=func2()) ? $f2 : func3()) );