Text::ParseWords(3pm)
Okay bestie, welcome to Text::ParseWords(3pm) from the Perl Programmers Reference Guide β the manual for parsing text into tokens, and honestly itβs giving useful. π
πΈ NAME πΈ
Text::ParseWords β parse text into an array of tokens or an array of arrays. β¨
β¨ SYNOPSIS β¨
use 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!
old_shellwords() is marked DEPRECATED! β just so weβre clear, bestie. π
π¦ DESCRIPTION π¦
The nested_quotewords() and quotewords() functions accept a delimiter (which can be a regular expression) and a list of lines, and then break those lines up into a list of words while 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 flag controls what happens with delimiters and special characters:
trueβ if true, then the tokens are split on the specified delimiter, but all other characters (including quotes and backslashes) are kept in the tokens. πfalseβ if$keepis false then the*quotewords()functions remove all quotes and backslashes that are not themselves backslash-escaped or inside of single quotes (i.e.,quotewords()tries to interpret these characters just like the Bourne shell). NB: these semantics are significantly different from the original version of this module shipped with Perl 5.000 through 5.004. π"delimiters"β as an additional feature,$keepmay be the keyword"delimiters", which causes the functions to preserve the delimiters in each string as tokens in the token lists, in addition to preserving quote and backslash 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. π
π EXAMPLES π
The 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:
- 0 β a simple word
- 1 β multiple spaces are skipped because of our
$delim - 2 β use of quotes to include a space in a word
- 3 β use of a backslash to include a space in a word
- 4 β use of a backslash to remove the special meaning of a double-quote
- 5 β another simple word (note the lack of effect of the backslashed double-quote)
Replacing quotewords('\s+', 0, q{this is...}) with shellwords(q{this is...}) is a simpler way to accomplish the same thing. π
π₯ SEE ALSO π₯
Text::CSV β for parsing CSV files. π
π AUTHORS π
The 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 LICENSE π
This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. π
π«Ά Thatβs the page, bestie! Footer vibes: source/versionperl v5.42.3, dated2026-11-03, manual nameText::ParseWords(3pm)β iconic, no cap. πβ¨
π¦ where this page comes from
- alpine 3.24: perl-doc 5.42.3-r0 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms