- or download this
use warnings;
use strict;
sub a { "unchanged" };
sub print_a { print a(), "\n" };
- or download this
no strict 'refs';
no warnings 'redefine';
...
local *a = sub { "changed" };
print_a(); # prints "changed"
}
- or download this
print_a(); # prints "unchanged"
- or download this
sub localize_a_and_call_fn(&@) {
my ($fn, @args) = @_;
local *a = sub { "changed" };
$fn->(@args);
}
- or download this
localize_a_and_call_fn( \&print_a );
# prints "changed"
...
print "a() => ", a(), "\n";
};
# prints "a() => changed"
- or download this
sub localize_and_call_fn
{
...
local *$_ = sub { "changed" } for @$locals;
$fn->(@args);
}
- or download this
localize_and_call_fn( [qw(a b c)], \&print_a );
# prints "unchanged"
- or download this
# for (@$locals) {
# local *$_ = sub { "changed" };
# }
- or download this
sub localize_and_call_fn_2
{
...
localize_and_call_fn_2( [qw(a b c)], \&print_a );
# prints "changed"
- or download this
# (sub {
# local *c = sub { "changed" };
...
# })->(@_)
# })->(@_)
# })->();