Синтаксис, который вы используете, действителен с 5.18, но вам необходимо добавить use feature qw( lexical_subs );
, чтобы включить его.
use strict;
use warnings;
no warnings qw( experimental::lexical_subs ); # Needed before 5.26. Harmless in 5.26+
use feature qw( lexical_subs say );
sub fun2 {
my $var2 = 10;
my sub fun1 {
say $var2;
++$var2;
}
fun1();
say $var2;
}
fun2();
До 5.18 вы можете использовать
use strict;
use warnings;
use feature qw( say );
sub fun2 {
my $var2 = 10;
my $fun1 = sub {
say $var2;
++$var2;
};
$fun1->();
say $var2;
}
fun2();
или
use strict;
use warnings;
use feature qw( say );
sub fun2 {
my $var2 = 10;
local *fun1 = sub {
say $var2;
++$var2;
};
fun1();
say $var2;
}
fun2();