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