# 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 ---