# New Ticket Created by Ayiko
# Please include the string: [perl #118705]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=118705 >
s/// inside a for loop doesn't update $/ and uses previous value in replacement
text.
Failed s/// doesn't reset $/ either.
m// seems to work ok.
Same problem with $0, $<foo> who depend on $/
---test file:
use v6;
use Test;
my $v; my $i; $/ = ();
$_ = '1'; s'1'_$/'; is $_ , '_1', '$/: plain
s///';
$_ = '2'; $i = 1; while $i-- { s'2'_$/'; is $_ , '_2', '$/: s/// in
while'; };
$_ = '3'; loop { s'3'_$/'; last }; is $_ , '_3', '$/: s/// in
loop';
$_ = '4'; -> $_ is copy { s'4'_$/'; is $_ , '_4', '$/: s/// in
-> {}'; }($_);
$_ = 'x'; for '5' -> $_ is copy { s'5'_$/'; is $_ , '_5', '$/: s/// in
for (copy)';};
$v = '6'; for 'x' { $v ~~ s'6'_$/'; is $v , '_6', '$/: $v ~~
s/// in for'; };
$v = '7'; for 'x' { $v ~~ s'7'_$/'; }; is $v , '_7', '$/: $v ~~
s/// outside for';
$v = 'X'; for 'x' { $v ~~ s'8'_$/'; }; nok $/, '$/: failed s///
inside for';
$_ = '1'; /1/; is $/, '1', '$/: plain m//';
$_ = '2'; $i = 1; while $i-- { /2/; is $/, '2', '$/: m// in
while'; };
$_ = '3'; loop { /3/; last }; is $/, '3', '$/: m// in loop';
$_ = '4'; -> $_ is copy { /4/; is $/, '4', '$/: m// in ->
{}'; }($_);
$_ = 'x'; for '5' -> $_ is copy { /5/; is $/, '5', '$/: m// in for
(copy)';};
$v = '6'; for 'x' { $v ~~ /6/; is $/, '6', '$/: $v ~~ m// in
for'; };
$v = '7'; for 'x' { $v ~~ /7/; }; is $/, '7', '$/: $v ~~ m//
outside for';
---output on Rakudo star 2013.05
ok 1 - $/: plain s///
ok 2 - $/: s/// in while
ok 3 - $/: s/// in loop
ok 4 - $/: s/// in -> {}
not ok 5 - $/: s/// in for (copy)
# got: '_4'
# expected: '_5'
not ok 6 - $/: $v ~~ s/// in for
# got: '_4'
# expected: '_6'
not ok 7 - $/: $v ~~ s/// outside for
# got: '_4'
# expected: '_7'
not ok 8 - $/: failed s/// inside for
ok 9 - $/: plain m//
ok 10 - $/: m// in while
ok 11 - $/: m// in loop
ok 12 - $/: m// in -> {}
ok 13 - $/: m// in for (copy)
ok 14 - $/: $v ~~ m// in for
ok 15 - $/: $v ~~ m// outside for
---