わたなべです.
split(":", n) がまずいわけないですね.
なんかださい方法ですが, char_sep != 0 のときは i = 0;
にしちゃうのが簡単かな.
--- string.c.orig Fri Feb 7 15:16:05 1997
+++ string.c Wed Feb 19 16:38:01 1997
@@ -1629,6 +1629,8 @@
rb_scan_args(argc, argv, "02", &spat, &limit);
if (!NIL_P(limit)) {
lim = NUM2INT(limit);
+ if (lim == 0) limit = Qnil;
+ else if (lim == 1) return ary_new3(1, str);
i = 1;
}
@@ -1663,6 +1665,7 @@
char *ptr = str->ptr;
int len = str->len;
char *eptr = ptr + len;
+ i = 0;
if (char_sep == ' ') { /* AWK emulation */
int skip = 1;
@@ -1679,8 +1682,8 @@
}
else {
if (isspace(*ptr)) {
- ary_push(result, str_substr(str, beg, end-beg));
if (!NIL_P(limit) && lim <= ++i) break;
+ ary_push(result, str_substr(str, beg, end-beg));
skip = 1;
beg = end + 1;
}
@@ -1693,8 +1696,8 @@
else {
for (end = beg = 0; ptr<eptr; ptr++) {
if (*ptr == char_sep) {
- ary_push(result, str_substr(str, beg, end-beg));
if (!NIL_P(limit) && lim <= ++i) break;
+ ary_push(result, str_substr(str, beg, end-beg));
beg = end + 1;
}
end++;