Я пытаюсь выполнить split
строку в ее символах компонента.
Для этой цели я всегда использовал split(//, $str)
, как было предложено документация:
Однако, это:
print join(':', split(//, 'abc')), "\n";
использует пустые строки в качестве разделителей для вывода выводаa:b:c
; таким образом, пустую строку можно использовать для разделения EXPR на список его компонентных символов.
В моем script мне нужен массив из первых N символов или первых length($str) - 1
символов, в зависимости от того, что меньше. Для этого я использую split(//, $str, $n + 1)
и отбрасываю последний элемент.
В теории это должно сработать. Если LIMIT меньше длины строки, все дополнительные символы сгруппированы в последний элемент, который отбрасывается. Если LIMIT больше длины строки, последний элемент - последний символ, который отбрасывается.
Здесь я столкнулся с некоторой проблемой.
В документации написано:
... и каждый из них:
print join(':', split(//, 'abc', 3)), "\n";
print join(':', split(//, 'abc', 4)), "\n";
выдает выводa:b:c
.
Но это не результат, который я получаю. Если LIMIT больше количества символов, результирующий массив всегда заканчивается ровно одним пустым элементом (demo):
print join(':', split(//, 'abc', 1)), "\n"; # abc
print join(':', split(//, 'abc', 2)), "\n"; # a:bc
print join(':', split(//, 'abc', 3)), "\n"; # a:b:c
print join(':', split(//, 'abc', 4)), "\n"; # a:b:c:
print join(':', split(//, 'abc', 99)), "\n"; # a:b:c:
Эти результаты напрямую противоречат примеру из документации.
Неправильная документация? Является ли моя версия Perl (v5.22.2) неправильной?
Если этого нельзя избежать, как я могу выполнить свою первоначальную цель?