my $closure;
{
my $variable;
$closure = sub { $variable = shift };
}
The inner block is now a closure. The $variable will NOT disappear at the end of the scope wherein it was defined. The outer naked block is just a naked block. A closure can only be dynamically constructed and is a block that preserves a variable beyond the scope it was defined in.
Your own example shows just a naked block. You have perfectly explained its virtues which I was already aware (and an advocate) of, and which I did not challenge in the first place. But there is no closure in your code. Please check your definitions.
Makeshifts last the longest. |