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

Reply via email to