![]() |
![]()
| ![]() |
![]()
NAMEText::ParseWords - parse text into an array of tokens or array of arrays SYNOPSISuse Text::ParseWords; @lists = nested_quotewords($delim, $keep, @lines); @words = quotewords($delim, $keep, @lines); @words = shellwords(@lines); @words = parse_line($delim, $keep, $line); @words = old_shellwords(@lines); # DEPRECATED! DESCRIPTIONThe nested_quotewords() and quotewords() functions accept a delimiter (which can be a regular expression) and a list of lines and then breaks those lines up into a list of words ignoring delimiters that appear inside quotes. quotewords() returns all of the tokens in a single long list, while nested_quotewords() returns a list of token lists corresponding to the elements of @lines. parse_line() does tokenizing on a single string. The *quotewords() functions simply call parse_line(), so if you're only splitting one line you can call parse_line() directly and save a function call. The $keep controls what happens with delimters and special characters:
shellwords() is written as a special case of quotewords(), and it does token parsing with whitespace as a delimiter-- similar to most Unix shells. EXAMPLESThe sample program: use Text::ParseWords; @words = quotewords('\s+', 0, q{this is "a test" of\ quotewords \"for you}); $i = 0; foreach (@words) { print "$i: <$_>\n"; $i++; } produces: 0: <this> 1: <is> 2: <a test> 3: <of quotewords> 4: <"for> 5: <you> demonstrating:
Replacing "quotewords('\s+', 0, q{this is...})" with "shellwords(q{this is...})" is a simpler way to accomplish the same thing. SEE ALSOText::CSV - for parsing CSV files AUTHORSThe original author is unknown, but presumably this evolved from "shellwords.pl" in Perl 4. Much of the code for parse_line() (including the primary regexp) came from Joerk Behrends <jbehrends@multimediaproduzenten.de>. Examples section and other documentation provided by John Heidemann <johnh@ISI.EDU>. Hal Pomeranz <pomeranz@netcom.com> maintained this from 1994 through 1999, and did the first CPAN release. Alexandr Ciornii <alexchornyATgmail.com> maintained this from 2008 to 2015. Many other people have contributed, with special thanks due to Michael Schwern <schwern@envirolink.org> and Jeff Friedl <jfriedl@yahoo-inc.com>. COPYRIGHT AND LICENSEThis library is free software; you may redistribute and/or modify it under the same terms as Perl itself.
|