Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

s/// doesn't update $/ inside for loop #3177

Closed
p6rt opened this issue Jun 30, 2013 · 7 comments
Closed

s/// doesn't update $/ inside for loop #3177

p6rt opened this issue Jun 30, 2013 · 7 comments
Labels

Comments

@p6rt
Copy link

p6rt commented Jun 30, 2013

Migrated from rt.perl.org#118705 (status was 'resolved')

Searchable as RT118705$

@p6rt
Copy link
Author

p6rt commented Jun 30, 2013

From perlbug@ayiko.be

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


@p6rt
Copy link
Author

p6rt commented Jun 30, 2013

From @lizmat

FWIW, confirmed on the latest blead parakudo.

On Jun 30, 2013, at 6​:39 PM, Ayiko (via RT) <perl6-bugs-followup@​perl.org> wrote​:

# 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-archive.perl.org/perl6/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, $&lt;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
---

@p6rt
Copy link
Author

p6rt commented Jun 30, 2013

The RT System itself - Status changed from 'new' to 'open'

@p6rt
Copy link
Author

p6rt commented Dec 1, 2014

From @raiph

See also​:

#​123005​: [BUG] $/ broken for replacement inside for loop

#​123323​: $0 in substitution

@p6rt
Copy link
Author

p6rt commented Oct 18, 2015

From @FROGGS

Patch​: rakudo/rakudo@32d7b08334
Tests​: Raku/roast@f665268fde

Closing ticket.

1 similar comment
@p6rt
Copy link
Author

p6rt commented Oct 18, 2015

From @FROGGS

Patch​: rakudo/rakudo@32d7b08334
Tests​: Raku/roast@f665268fde

Closing ticket.

@p6rt p6rt closed this as completed Oct 18, 2015
@p6rt
Copy link
Author

p6rt commented Oct 18, 2015

@FROGGS - Status changed from 'open' to 'resolved'

@p6rt p6rt added the Bug label Jan 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant