Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Use of Text::ParseWords

by 7stud (Deacon)
on Feb 08, 2010 at 08:25 UTC ( [id://821961] : note . print w/replies, xml ) Need Help??

in reply to Use of Text::ParseWords

You have a perl string containing this text:

"Jones, James", "Smith, Susan", Spot

The goal: split the string on the commas--but not where the commas are inside double quote marks.

A natural first thought might be to use split(). However, the code:

 my @pieces = split /,/, $string;

will split the string on every comma, giving you the pieces:

  • "Jones
  • James"
  • "Smith
  • Susan"
  • Spot

The function quotewords() is in a module called Text::ParseWords, which is found here:

and quotewords() accepts a list of lines and a delimiter and

breaks those lines up into a list of words ignoring delimiters that appear inside quotes.

In addition, if the second argument to quotewords() is false, e.g. 0, then quotewords() will strip the quote marks surrounding any of the pieces.

By looking at the result of the join():

Jones, James & Smith, Susan & Spot

you can tell what quotewords() returned as the pieces:

  • Jones, James
  • Smith, Susan
  • Spot

Replies are listed 'Best First'.
Re^2: Use of Text::ParseWords
by blackgoat (Acolyte) on Feb 08, 2010 at 10:04 UTC
    Thank you so much.