/
Str.pm
39 lines (35 loc) · 1.16 KB
/
Str.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Str is also {
our Str multi method reverse ($str: ) is export {
return $str.split('').reverse.join('');
}
our List multi method split(Code $delimiter) {
my $s = self;
return gather {
# XXX is this valid in Perl 6? or just a Rakudoism?
while $s ~~ $delimiter {
take $s.substr(0, $/.from);
$s.=substr([max] $/.to, 1);
}
take $s;
}
}
our List multi method split($delimiter, Int $limit) {
self.split($delimiter).[0..$limit];
}
# TODO: substitute with '$delimiter as Str' once coercion is implemented
our List multi method split($delimiter is copy) {
my Int $prev = 0;
$delimiter = ~$delimiter;
return gather {
my $pos;
# work around a rakudo bug: "102030405".index(0, 10).defined is True
while $prev <= self.chars
&& defined ($pos = self.index($delimiter, $prev)) {
take self.substr($prev, $pos - $prev);
$prev = $pos + $delimiter.chars;
}
take self.substr($prev);
}
}
}
# vim: ft=perl6