これYにプロトタイプ宣言しとくと、シンタクスシュガー的にかっこいいと思う

sub Y(&) { # >>499にプロトタイプを追加
my $f = shift;
my $m = sub { my $p = shift; $f->(sub { $p->($p)->(@_) }); };
$m->($m);
}

my $factorial = Y { # Yの後ろのsubが省略できる
my $label = shift;
sub { my $n = shift; ($n > 1) ? $n * $label->($n-1) : 1; }
};
print $factorial->(10);