Возвращение пустых элементов
Если между совпадениями для первого операнда нет текста (совпадения идут подряд), то на соответствующих местах возвращаются пустые элементы. Оператор
print join '-', split '=', 'a=b==c';
напечатает
a-b--c
В этом случае пустые элементы, расположенные в конце текста, не возвращаются.
Например, оператор
print join '-',split '=', '===a=b==c===';
напечатает
---a-b--c
Для получения этих пустых элементов надо использвать третий операнд. Проще всего его установить в -1 (или в большое положительное число), тогда вернутся все элементы, на которые разбит текст. Оператор
print join '-', split '=', '===a=b==c===', -1;
напечатает
---a-b--c---
Число -1 здесь эквивалентно бесконечно большому положительному числу.
Иногда бывает нужно получить только непустые элементы разбиения текста. Для этого перед оператором split можно поставить вызов функции grep с аргументом length:
print grep { length } split '=', '===a=b==c===', -1;
или вместо length можно подставить само возвращаемое в $_ split значение:
print grep $_, split '=', '===a=b==c===', -1;
Напечатается просто abc. К каждому элементу списка, возвращаемому оператором split, будет применена функция length. И если результат будет равен нулю, то этот элемент будет удален из данного списка.
Мы уже видели, что пустые фрагменты, совпавшие в начале текста, возвращаются. Но если совпадение было без поглощения текста, а чисто позиционным, то эти пустые фрагменты не возвращаются. Например, оператор
print join '-', split /(?=\w)/, "abcd";
напечатает a-b-c-d, хотя перед буквой a тоже было совпадение.
Обращаю ваше внимание, что оператор
split /^/m, $text;
вернет все логические строки, в том числе и пустые: ведь при совпадении с пустыми строками возвращаются элементы \n, которые сами не являются пустыми.