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: