內容

名稱

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() 會先將輸入中的所有 tab 擴充為空格,開始其工作。它所做的最後一件事是將空格轉回 tab。如果您不希望結果中有 tab,請將 $Text::Wrap::unexpand 設定為 false 值。同樣地,如果您不希望使用 8 個字元的 tab 停靠點,請將 $Text::Wrap::tabstop 設定為您希望用於 tab 停靠點的字元數。

如果您想要使用 \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 <cpan@dave.sharnoff.org> 在 Tim Pierce 和許多其他人的協助下。

授權

版權所有 (C) 1996-2009 David Muir Sharnoff。版權所有 (C) 2012-2013 Google, Inc。此模組可依您自己的風險修改、使用、複製和重新散布。儘管上述授權允許,但請勿公開重新散布此程式碼的修改版本,除非其通過未修改的 Text::Wrap 測試套件。