Recursive closure

Answer

Make my $sub be a separate line. then you can refer to it INSIDE the closure and also assign to it. You can't refer to a my variable in the same statement that declares it.

my $sub ;
$sub = sub{ blah; $sub->() }

Unfortunately that leaks memory.

use Scalar::Util qw( weaken );
my $weak_sub;
my $sub = sub{ blah; $weak_sub->() };
weaken($weak_sub = $sub);

Now what's interesting about this Usenet thread is that it's a rare example of Uri Guttman and Damian Conway and getting it completely and utterly wrong...

Next