内容

名称

Text::Wrap - 换行以形成简单的段落

语法

示例 1

use Text::Wrap;

$initial_tab = "\t";	# Tab before first line
$subsequent_tab = "";	# All other lines flush left

print wrap($initial_tab, $subsequent_tab, @text);
print fill($initial_tab, $subsequent_tab, @text);

$lines = wrap($initial_tab, $subsequent_tab, @text);

@paragraphs = fill($initial_tab, $subsequent_tab, @text);

示例 2

use Text::Wrap qw(wrap $columns $huge);

$columns = 132;		# Wrap at 132 characters
$huge = 'die';
$huge = 'wrap';
$huge = 'overflow';

示例 3

use Text::Wrap;

$Text::Wrap::columns = 72;
print wrap('', '', @text);

说明

Text::Wrap::wrap() 是一个非常简单的段落格式化程序。它通过在单词边界处断行来一次性格式化一个段落。缩进独立地控制第一行($initial_tab)和所有后续行($subsequent_tab)。请注意:$initial_tab$subsequent_tab 是将要使用的文本字符串:你不太可能传入一个数字。

Text::Wrap::fill() 是一个简单的多段落格式化程序。它分别格式化每个段落,然后在完成后将它们连接在一起。它将销毁原始文本中的所有空格。它通过查找换行符后的空格来将文本分解成段落。在其他方面,它的行为与 wrap() 相同。

wrap() 将尾随空格压缩成一个换行符,而 fill() 删除所有尾随空格。

wrap()fill() 都返回一个字符串。

与旧的 Unix fmt(1) 实用程序不同,此模块正确地计算了每一行中可能出现的任何 Unicode 组合字符(例如变音符号),用于扩展和取消扩展。这些是不会增加逻辑位置的重写字符。确保启用了适当的 Unicode 设置。

OVERRIDES

Text::Wrap::wrap() 具有许多控制其行为的变量。因为其他模块可能正在使用 Text::Wrap::wrap(),建议您不要更改这些变量!如果您无法做到这一点,那么在更改值时使用 local($Text::Wrap::VARIABLE) = YOURVALUE,以便还原原始值。如果您将变量导入到自己的名称空间,则此 local() 技巧将不起作用。

$Text::Wrap::columns 列中换行(默认值:76)。$Text::Wrap::columns 应设置为输出设备的全部宽度。事实上,每条生成的行长度都不得超过 $columns - 1

可以通过修改 $Text::Wrap::break 来控制哪些字符终止单词。将其设置为一个字符串,例如 '[\s:]'(在空格或冒号前换行)或预编译的正则表达式,例如 qr/[\s']/(在空格或撇号前换行)。默认值只是 '\s';也就是说,单词以空格终止。(这意味着,除其他外,诸如句号或逗号之类的尾随标点符号会保留在它们“附加”的单词中。)将 $Text::Wrap::break 设置为不会消耗任何字符的正则表达式(可能只是前瞻断言)将导致警告。

初学者须知:在示例 2 中,$columns 被导入到本地名称空间,并在本地设置。在示例 3 中,$Text::Wrap::columns 在其自己的名称空间中设置,而没有导入它。

Text::Wrap::wrap() 通过将其输入中的所有制表符展开为空格来开始其工作。它做的最后一件事是将空格变回制表符。如果您不希望结果中有制表符,请将 $Text::Wrap::unexpand 设置为 false 值。同样,如果您不想使用 8 个字符的制表符,请将 $Text::Wrap::tabstop 设置为您希望用于制表符的字符数。

如果您想用其他内容分隔行,而不是 \n,那么将 $Text::Wrap::separator 设置为您喜欢的分隔符。这会用 $Text::Wrap::separator 替换所有换行符。如果您只想保留现有的换行符,但使用其他内容添加新的换行符,请改用 $Text::Wrap::separator2

当遇到长度超过 $columns 的单词时,它们会被拆分。wrap() 在第 $columns 列添加一个 "\n"。可以通过将 $huge 设置为 'die' 或 'overflow' 来覆盖此行为。当设置为 'die' 时,大单词将导致调用 die()。当设置为 'overflow' 时,大单词将保持原样。

历史记录:'die' 曾经是 $huge 的默认值。现在,'wrap' 是默认值。

示例

代码

print wrap("\t","",<<END);
This is a bit of text that forms 
a normal book-style indented paragraph
END

结果

"	This is a bit of text that forms
a normal book-style indented paragraph   
"

代码

$Text::Wrap::columns=20;
$Text::Wrap::separator="|";
print wrap("","","This is a bit of text that forms a normal book-style paragraph");

结果

"This is a bit of|text that forms a|normal book-style|paragraph"

另请参阅

有关东亚半角和全角字符的正确处理,请参阅 Text::WrapI18N。有关更详细的控件:Text::Format

作者

David Muir Sharnoff <[email protected]> 在 Tim Pierce 和许多其他人的帮助下。

许可证

版权所有 (C) 1996-2009 David Muir Sharnoff。版权所有 (C) 2012-2013 Google, Inc。此模块可能会根据你自己的风险进行修改、使用、复制和重新分发。尽管前述许可证允许,但请不要公开重新分发此代码的修改版本,除非它通过未修改的 Text::Wrap 测试套件。