# New Ticket Created by Ron Schmidt
# Please include the string: [perl #57722]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=57722 >
Index: src/builtins/any-str.pir
===================================================================
--- src/builtins/any-str.pir (revision 30090)
+++ src/builtins/any-str.pir (working copy)
@@ -89,8 +89,10 @@
len = self.'chars'()
have_len:
if len >= 0 goto len_done
+ if start < 0 goto neg_start
$I0 = self.'chars'()
len += $I0
+ neg_start:
len -= start
len_done:
$S0 = self
Index: t/spec/S29-str/substr.t
===================================================================
--- t/spec/S29-str/substr.t (revision 21834)
+++ t/spec/S29-str/substr.t (working copy)
@@ -2,7 +2,7 @@
use Test;
-plan 42;
+plan 43;
# L<S29/Str/=item substr>
@@ -24,6 +24,7 @@
is(substr($str, 0, -2), "foob", "from beginning, with negative length");
is(substr($str, 2, -2), "ob", "in middle, with negative length");
is(substr($str, 3, -3), "", "negative length - gives empty string");
+ is(substr($str, -4, -1), "oba", "negative start and length ");
is($str, "foobar", "original string still not changed");
};
From the irc log for today (8/7)
15:50 </perl6/2008-08-07#i_426959> ron perl6: my $a = '0123456'; say
substr($a, -5, -2);
15:50 </perl6/2008-08-07#i_426960> p6eval elf 21826, pugs: OUTPUT[234?]
15:50 </perl6/2008-08-07#i_426961>
..rakudo 29834: OUTPUT[23456?]
perl5 agrees with the pugs output.
Attached patch fixes the problem and includes a test in: S29-str/substr.t
Ron