http://qs321.pair.com?node_id=788301


in reply to Re^2: Local for lexicals
in thread Local for lexicals

Well, you could declare $x within the call to lambda, instead of surrounding it:
#!perl use strict; use warnings; sub lambda { my $fn = pop; my @foo = @_; # foo references $x, etc. sub { # Put values into referenced params ${$foo[$_]} = $_[$_] for 0..$#_; &$fn; } } my $x = 3; my $closure = lambda do { my ($x, $y); \($x, $y) => sub { print "Got $x and $y\n" } } ; $closure->($_, $_+1) for (1..4); print "And my X is $x\n";
Though I suspect that's a distinction that won't be seen as advantageous. It's just as easy to write
my $closure = sub { my ($x, $y) = @_; print "Got $x and $y\n"; };
which is the Perlish way to do what the OP wants to do.

Caution: Contents may have been coded under pressure.