Забелязах някакво любопитно поведение с командата за разделяне на Perl, особено в случаите, когато очаквам полученият масив да съдържа празни низове, но всъщност няма.
Например, ако имам разделител (и) в края (или началото) на низ, полученият масив няма празен низ (и) като последен (или първи) елемент.
Пример:
@s = split(/x/, "axb")
произвежда масив от 2 елемента ["a", "b"]
@s = split(/x/, "axbx")
произвежда същия масив
@s = split(/x/, "axbxxxx")
произвежда същия масив
Но щом сложа нещо на края, всички тези празни низове се появяват като елементи:
@s = split(/x/, "axbxxxxc")
произвежда масив от 6 елемента ["a", "b", "", "", "", "c"]
Поведението е подобно, ако ограничителите са в началото.
Очаквам празен текст между, преди илислед разделителите винаги да произвеждат елементи в разделянето. Може ли някой да ми обясни защо разделянето се държи така в Perl? Опитах същото нещо в Python и тя работи както се очаква.
Забележка: Perl v5.8
Отговори:
45 за отговор № 1от документацията:
По подразбиране празни водещи полета се запазват, а празните последни се изтриват. (Ако всички полета са празни, те се считат за крайни.)
Това обяснява поведението, с което виждатезадни полета. Това обикновено има смисъл, тъй като хората често са много небрежни за пропуските, например. Можете обаче да получите запълващите празни полета, ако искате:
split /PATTERN/,EXPR,LIMIT
Ако LIMIT е отрицателен, той се третира, както ако е посочен произволно голям LIMIT.
Така че, за да получите всички празни полета:
@s = split(/x/, "axbxxxxc", -1);
(Предполагам, че сте направили небрежна грешка, когато гледате водещите празни полета - те определено са запазени split(/x/, "xaxbxxxx")
, Резултатът има размер 3.