Front page | perl.perl6.language |
Postings from May 2005
Re: split /(..)*/, 1234567890
Thread Previous
|
Thread Next
From:
Jody Belka
Date:
May 12, 2005 10:16
Subject:
Re: split /(..)*/, 1234567890
Message ID:
20050512171322.GG23932@faith.gentoo.org
On Thu, May 12, 2005 at 06:29:49PM +0200, "TSa (Thomas Sandla?)" wrote:
> perl -le 'print join ",", split /(..)/, 112233445566'
> ,11,,22,,33,,44,,55,,66
[snipped]
> perl -le 'print join ",", split /(..)/, 11223'
> ,11,,22,3
>
> Am I the only one who finds that inconsistent?
Maybe, but it's because you're misunderstanding what split does (i can
heartily recommend TFM in this case).
Let's start with a simpler case (inside debugger for help):
x split /../, 112233445566, -1 [ -1 to preserve all found fields ]
0 ''
1 ''
2 ''
3 ''
4 ''
5 ''
6 ''
Split uses the regular expression to find "seperators" in the text, and
then return the contents of the fields between them. The above case looks
like this:
sep sep sep sep sep sep
| | | | | |
11 22 33 44 55 66
| | | | | |
field field field field field field
Ok, let's try that with your second example:
x split /../, 11223, -1
0 ''
1 ''
2 3
sep sep
| |
11 22 3
| | |
field field field
Now, if the regular expression contains parentheses, additional list
elements are created from each matching substring (quoted almost verbatim
from TFM). So:
x split /(..)/, 112233445566, -1
0 ''
1 11
2 ''
3 22
4 ''
5 33
6 ''
7 44
8 ''
9 55
10 ''
11 66
12 ''
x split /(..)/, 11223, -1
0 ''
1 11
2 ''
3 22
4 3
And of course, if we remove the LIMIT from the equation, then any trailing
fields will be removed. Ergo the results quoted at the top of this email.
Hope this helps you (and anyone else who might have been confused) understand
what is going on.
J
--
Jody Belka
knew (at) pimb (dot) org
Thread Previous
|
Thread Next