Используются модули: std.string, std.regex.
split - нетерпеливая функция, возвращающая сразу весь результат.
splitter - ленивая функция. В синтаксисе вызова ничего не меняется, кроме как split заменить на splitter.
Примеры.
Без указания разделителя split ведет себя похоже на одноименную функцию из Perl: делит строку по пробельным символам, схлопывая соседние разделители:
rdmd --eval='auto s="123 \t234"; s.split.writeln' # два пробела и tab
["123", "234"]
rdmd --eval='auto s="123 \t234"; s.splitter.writeln' # splitter - выглядит так же
["123", "234"]
rdmd --eval='auto s="678
123 \t234"; s.split.writeln' # с переносом строки
["678", "123", "234"]
С указанием разделителя типа string делается только то, что запрошено:
rdmd --eval='auto s="123 \t234"; s.split(" ").writeln' # два пробела и таб
["123", "", "\t234"]
rdmd --eval='auto s="123 234"; s.split(" ").writeln' # три пробела
["123", "", "", "234"]
Разделитель-символ, работает аналогично:
rdmd --eval="auto s=\"123 234\"; s.split(' ').writeln"
["123", "", "", "234"]
Разделитель - регулярное выражение:
rdmd --eval='auto s="123 \t 234"; s.split(regex(r"\s+")).writeln'
["123", "234"]
Дополнительно splitter позволяет удерживать разделители:
rdmd --eval='auto s="123***234*"; s.splitter!(Yes.keepSeparators)( regex(r"\*")).writeln'
["123", "*", "", "*", "", "*", "234", "*"]
# без удержания:
rdmd --eval='auto s="123***234*"; s.splitter( regex(r"\*")).writeln'
["123", "", "", "234", ""]