use strict;
use warnings;
use feature qw( say );
sub f {
my $x = shift;
return sub { $x };
}
sub g {
my $y = shift;
return sub { eval '$y' };
}
sub h {
my $z = shift;
return sub { $z if 0; eval '$z' };
}
say f( 4 )->() // "[undef]";
say f( 5 )->() // "[undef]";
say "--";
say g( 6 )->() // "[undef]";
say g( 7 )->() // "[undef]";
say "--";
say h( 8 )->() // "[undef]";
say h( 9 )->() // "[undef]";
####
4
5
--
Variable "$y" is not available at (eval 1) line 1.
[undef]
Variable "$y" is not available at (eval 2) line 1.
[undef]
--
8
9
####
my $v = $v;