Your anonymous subroutine can't see $var since it's compiled in a lexical scope separate from where it's executed. But it can have values passed into it as arguments.
sub create_f {
my $func = shift;
return sub {
my $var = "xpto";
$func->( $var );
}
}
my $function = create_f(
sub { print ">> $_[0] <<\n" }
);
$function->();
Update: And if you want to specify the value at runtime, it's as easy as passing it into create_f.
sub create_f {
my $func = shift;
my $var = shift;
return sub {
$func->( $var );
}
}
my $function = create_f(
sub { print ">> $_[0] <<\n" }, 'xpto'
);
$function->();