BTW, my test was to change the string used in the match and then see if $1 also changed. That isn't a perfect test because it might be that the string is copied but $1 doesn't correctly use the copy made, for example. Here is a more polished version and two sets of results:
#!/usr/bin/perl -w
use strict;
print "$] $^O\n";
for( qw( s l sg lg ) ) {
my $x= "-y1-y2-";
my @y;
$y[0]= $x =~ /(.\d)/
if 's' eq $_;
@y= $x =~ /(.\d)/
if 'l' eq $_;
$y[0]= $x =~ /(.\d)/g
if 'sg' eq $_;
@y= $x =~ /(.\d)/g
if 'lg' eq $_;
$x= ":1n:2n:";
print "$_ ($1)\n";
}
__END__
5.006 MSWin32
s (y1)
l (1n)
sg (1n)
lg (2n)
5.008008 MSWin32
s (y1)
l (y1)
sg (1n)
lg (2n)
Which shows I'd missed the only "will copy" case in 5.6.