Text::ParseWords - 将文本解析为标记数组或数组数组
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!
nested_quotewords()
和 quotewords()
函数接受一个分隔符(可以是正则表达式)和一个行列表,然后将这些行分解成一个单词列表,忽略出现在引号内的分隔符。quotewords()
在一个长列表中返回所有标记,而 nested_quotewords()
返回一个标记列表列表,对应于 @lines
的元素。parse_line()
对单个字符串进行标记化。*quotewords()
函数只是调用 parse_line()
,所以如果你只分割一行,你可以直接调用 parse_line()
并节省一个函数调用。
$keep
控制分隔符和特殊字符的处理方式
如果为真,则在指定的分隔符处分割标记,但所有其他字符(包括引号和反斜杠)都保留在标记中。
如果 $keep
为假,则 *quotewords()
函数会删除所有未被反斜杠转义或不在单引号内的引号和反斜杠(即,quotewords()
尝试像 Bourne shell 一样解释这些字符)。注意:这些语义与 Perl 5.000 到 5.004 中附带的此模块的原始版本有很大不同。
"delimiters"
作为一项附加功能,$keep 可以是关键字“delimiters”,这会导致函数除了保留引号和反斜杠字符外,还将每个字符串中的分隔符作为标记保留在标记列表中。
shellwords()
是作为 quotewords()
的特例编写的,它使用空格作为分隔符进行标记解析,类似于大多数 Unix shell。
示例程序
use Text::ParseWords;
@words = quotewords('\s+', 0, q{this is "a test" of\ quotewords \"for you});
$i = 0;
foreach (@words) {
print "$i: <$_>\n";
$i++;
}
产生
0: <this>
1: <is>
2: <a test>
3: <of quotewords>
4: <"for>
5: <you>
演示
一个简单的词
由于我们的 $delim,多个空格被跳过
使用引号将空格包含在一个词中
使用反斜杠将空格包含在一个词中
使用反斜杠删除双引号的特殊含义
另一个简单的词(注意反斜杠双引号没有效果)
将 quotewords('\s+', 0, q{this is...})
替换为 shellwords(q{this is...})
是实现相同目的的更简单方法。
Text::CSV - 用于解析 CSV 文件
最初的作者未知,但推测它是由 Perl 4 中的 shellwords.pl
演变而来的。
parse_line()
的大部分代码(包括主要正则表达式)来自 Joerk Behrends <[email protected]>。
示例部分和其他文档由 John Heidemann <[email protected]> 提供。
Hal Pomeranz <[email protected]> 在 1994 年至 1999 年期间维护了它,并进行了第一次 CPAN 发布。
Alexandr Ciornii <alexchornyATgmail.com> 在 2008 年至 2015 年期间维护了它。
许多其他人也做出了贡献,特别感谢 Michael Schwern <[email protected]> 和 Jeff Friedl <[email protected]>。
此库是免费软件;您可以根据与 Perl 本身相同的条款重新分发和/或修改它。