Hallo Benne.
leider hat frank nicht genau definiert, was er meint. So können wir hier nur raten. Schade eigentlich.
Wenn man mit split eine Zeichenkette auseinander nimmt, und die Trennzeichen mitnehmen möchte, macht man das bekanntlich so:
my @array = split(/(TRENNZEICHEN)/,$string);
Das Ergebnis wären folglich die Trennzeichen, sowie all die Teile der Zeichenkette, die keine Trennzeichen sind. Beispiel:
my $string = 'The quick brown fox jumps over the lazy dog.';
my @array = split(/(\W)/,$string);
print "'".join("'\n'",@array)."'";
Die Ausgabe würde wie folgt aussehen:
'The'
' '
'quick'
' '
'brown'
' '
'fox'
' '
'jumps'
' '
'over'
' '
'the'
' '
'lazy'
' '
'dog'
'.'
Wenn die Zeichenkette allerdings nur aus Trennzeichen besteht, wie in dem Fall, den frank beschrieben hat, sieht das Ganze so aus:
my $string = 'The quick brown fox jumps over the lazy dog.';
my @array = split(/(\w+\W)/,$string);
print "'".join("'\n'",@array)."'";
Die Ausgabe wäre hierbei:
''
'The '
''
'quick '
''
'brown '
''
'fox '
''
'jumps '
''
'over '
''
'the '
''
'lazy '
''
'dog.'
Und wie wir sehen, entstehen dabei sehr viele leere Elemente, da sich zwischen den Trennzeichen nunmal keine weiteren Zeichen befinden. Und um eben diese leeren Elemente geht es.
Benutzt man dann grep, um die leeren Elemente zu entfernen...
my $string = 'The quick brown fox jumps over the lazy dog.';
my @array = grep {$_ ne ""} split(/(\w+\W)/,$string);
print "'".join("'\n'",@array)."'";
erhält man die gewünschte Ausgabe:
'The '
'quick '
'brown '
'fox '
'jumps '
'over '
'the '
'lazy '
'dog.'
Und ich vermute, dass frank mit den leeren Elementen genau das gemeint hat.
Schöne Grüße,
Norbert Klein