Not a good solution by any means, but somebody might find it
interesting.  Assumes balanced quotes, no escaping, etc.

    require 'enumerator'

    def my_split s
      s.split('"')                   .  # Just split on the quote
        to_enum(:each_slice,2)       .  # ... and deal w/ pairs
        inject([]) {
           |a,(e,o)| a               .
                     concat(
                        e.split(' ') +  # Split unquotes
                        [o]             # Stuff in quotes is okay as is
                     )
        }                            .
        compact                         # Finnally remove nils
    end


-- 
Lou.