/ / Perl split с празен текст преди / след разделители - perl

Perl разделен с празен текст преди / след разделители - perl

Забелязах някакво любопитно поведение с командата за разделяне на 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.