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 设置。
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 测试套件。