# New Ticket Created by Raphael Descamps
# Please include the string: [perl #49962]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=49962 >
./perl6 -e 'my $s = "foo"; my $res = chop($s);say $s;say $res'
foo
fo
./perl6 -e 'my $s = "foo"; my $res = $s.chop;say $s;say $res'
foo
fo
I was surprised to discover that chop was still not implemented in
Rakudo. So it's my first try to implement a new perl6 feature and
amazingly, it even seems to works. I still didn't figure out how to
write builtins in perl6, so sorry but it's in PIR for now.
Anyway, it's fun to be able to implement a new perl6 feature so
easily :)
Index: src/builtins/string.pir
===================================================================
--- src/builtins/string.pir (revision 24981)
+++ src/builtins/string.pir (working copy)
@@ -200,7 +200,22 @@
.return ($S0)
.end
+=item chop
+ our Str method Str::chop ( Str $string: )
+
+Returns string with one Char removed from the end.
+
+=cut
+
+.sub 'chop'
+ .param string a
+ .local pmc s
+ s = new 'Perl6Str'
+ s = a
+ .return s.'chop'()
+.end
+
=back
=head2 TODO Functions
@@ -216,12 +231,6 @@
list, it chops each item in turn, and returns the last character
chopped.
-=item chop
-
- our Str method Str::chop ( Str $string: )
-
-Returns string with one Char removed from the end.
-
=item p5chomp
our Int multi P5emul::Str::p5chomp ( Str $string is rw )
Index: src/classes/Str.pir
===================================================================
--- src/classes/Str.pir (revision 24981)
+++ src/classes/Str.pir (working copy)
@@ -190,7 +190,25 @@
.return (retv)
.end
+.sub 'chop' :method
+ .local string tmps
+ .local pmc retv
+ .local int len
+ retv = new 'Perl6Str'
+ tmps = self
+
+ len = length tmps
+ if len == 0 goto done
+ dec len
+ substr tmps,tmps, 0, len
+ done:
+ retv = tmps
+ .return(retv)
+.end
+
+=cut
+
# Local Variables:
# mode: pir
# fill-column: 100