in reply to How to get variable evaluation in anonymous subroutines declaration

A  do BLOCK also forms a closure without the need for either a named or anonymous secondary subroutine.
>perl -wMstrict -le "my $param = 'param is foo'; my $coderef = do { my $sub_param = $param; sub { print $sub_param } }; $coderef->(); $param = 'param now bar'; $coderef->(); " param is foo param is foo