[comp.lang.perl] combined split modes?

tchrist@convex.COM (Tom Christiansen) (02/03/91)

From the keyboard of eichin@athena.mit.edu:
:1) split(/[ \t]+/,"a-b    c") yields ("a-b","c")
:2) split(/[ \t]/, "a-b    c") yields ("a-b","","","","","c")
:3) split(/(-)/,   "a-b    c") yields ("a","-","b    c")
:
:What I want is something that yields ("a","-","b","c").
:I'm sure I can do a nested foreach, splitting with the first pattern
:and then splitting each result with the third. But I though I might
:perhaps be able to do it with a single split...
:
:4) split(/(-)|[ \t]/,"a-b    c") yields ("a","-","b","","","","","c")
:5) split(/(-)|[ \t]+/,"a-b    c") yields ("a","-","b","","c")

I think for expediency (read laziness), I'd just use your method
#5 and send it through a grep that weeds out null elements:

    @a = grep($_ ne '', split(/(-)|[ \t]+/,"a-b    c"));

There are probably many other ways.

--tom
--
"Hey, did you hear Stallman has replaced /vmunix with /vmunix.el?  Now
 he can finally have the whole O/S built-in to his editor like he
 always wanted!" --me (Tom Christiansen <tchrist@convex.com>)