my @colors=qw(red blue green yellow orange purple violet);
print "----- our \$x; for \$x ...; after for block ---------\n";
our $x;
foreach $x (@colors) {
no strict 'refs';
my $name=$x;
*{$x.'_0'}=sub { $x="$x|$x"; print "doubling \$x: <$x>\n"; };
}
print "setting \$x to 'x'\n";
$x="x";
red_0();
{
local $x="X";
print "localized \$x to 'X'\n";
red_0();
print "leaving localization block\n";
}
red_0();
####
----- our $x; for $x ...; after for block ---------
setting $x to 'x'
doubling $x:
localized $x to 'X'
doubling $x:
leaving localization block
doubling $x:
####
my @colors=qw(red blue green yellow orange purple violet);
print "----- my \$x; for \$x ... ---------\n";
my $x;
foreach $x (@colors) {
no strict 'refs';
my $name=$x;
*{$x.'_0'}=sub { $x="$x|$x"; print "doubling \$x: <$x>\n"; };
}
$x="x";
print "set \$x to 'x'\n";
print "\$colors[0]=<$colors[0]> \$x=<$x>\n";
red_0();
print "\$colors[0]=<$colors[0]> \$x=<$x>\n";
$colors[0]='RED';
print "setting \$colors[0] to 'RED'\n";
red_0();
####
----- my $x; for $x ... ---------
set $x to 'x'
$colors[0]= $x=
doubling $x:
$colors[0]= $x=
setting $colors[0] to 'RED'
doubling $x:
doubling $x: