Хотя ответ DSM точен, реальный способ расчета факториалов в Perl, независимо от того, используете ли вы алгоритм DSM (в гольфе или нет), равен memoize Это. Если вы собираетесь вызывать его с любой частотой, вы захотите запомнить любую рекурсивную математическую функцию.
use Memoize;
memoize( 'fact2' );
sub fact2 {$_[0]&&$_[0]>=2?$_[0]*fact2($_[0]-2):1}