use Tie::Scalar::Once; delay $x => sub { sqrt 2 }; # ... if ($you_need_to) { print $x }