From 1fe71b857196282d3f3d6c2348a2b881f5d48dc3 Mon Sep 17 00:00:00 2001 From: Moritz Lenz Date: Mon, 23 Feb 2009 19:30:54 +0100 Subject: [PATCH] work around Rakudo bugs to get Str.split working --- src/setting/Any.pm | 2 +- src/setting/Str.pm | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/setting/Any.pm b/src/setting/Any.pm index e515e58a60e..24a916828b6 100644 --- a/src/setting/Any.pm +++ b/src/setting/Any.pm @@ -1,5 +1,5 @@ class Any is also { - method split($delimiter, Int $limit = *) { + method split($delimiter, $limit = *) { if $limit ~~ Whatever { return (~self).split($delimiter); } else { diff --git a/src/setting/Str.pm b/src/setting/Str.pm index d5437465b2e..9be1e856adc 100644 --- a/src/setting/Str.pm +++ b/src/setting/Str.pm @@ -19,13 +19,15 @@ class Str is also { self.split($delimiter).[0..$limit]; } - # TODO: substitute with $delimiter as Str once coercion is implemented + # 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; - while defined ($pos = self.index($delimiter, $prev)) { + # 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; }