Я наткнулся на «странное» поведение, когда попытался проанализировать многострочную строку (со строками, разделенными табуляцией) с намерением найти все значения, разделенные табуляцией, используя два разбиения в строке:
use v6.d; # 2020.01 release
my $s = "L1:C1\tL1:C2\tL1:C3\nL2:C1\tL2:C2\tL2:C3\nL3:C1\tL3:C2\tL3:C3";
say $s.split(/\n/).split(/\t/).raku;
и соответствующая распечатка выглядит следующим образом:
("L1:C1", "L1:C2", "L1:C3 L2:C1", "L2:C2", "L2:C3 L3:C1", "L3:C2", "L3:C3").Seq
«Странное» поведение в 3-м и 5-м членах результирующей последовательности. Кажется, что есть перекрытие «ожидаемой» последней строки строки и первой строки следующей строки.
Мои ожидания были примерно такими:
("L1:C1", "L1:C2", "L1:C3", "L2:C1", "L2:C2", "L2:C3", "L3:C1", "L3:C2", "L3:C3").Seq
Кто-нибудь, чтобы дать подробное объяснение внутренней работы этого поведения?
Просто чтобы прояснить ситуацию, я знаю, что правильный код:
$s.split(/\n/)>>.split(/\t/).flat.raku
, но мой вопрос касается внутренней работы "неправильного" кода. Как Раку пришел к такому результату?