my $_factorial; $_factorial = sub { my ($result, $counter, $max) = @_; return $result if $counter > $max; @_ = (($result * $counter), ($counter + 1), $max); goto $_factorial; }; sub factorial { my ($num) = @_; @_ = (1, 1, $num); goto $_factorial; }