Various along the lines of "Why does $1 not DWIM?"
The capture variables are globally global, they are not dynamically or lexically scoped.
Sometimes you can pretend like they are dynamically scoped.
'foo' =~ /(.*)/;
print "$1\n"; # foo
{
'bar' =~ /(.*)/;
print "$1\n"; # bar
}
print "$1\n"; # foo
But you will get burned