レキシカル変数使うなら
my $f = sub { my ($n) = @_; $n < 1 ? 1 : $n * $f->($n - 1) };
print $f->(10);

こいで十分。