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()
會先將輸入中的所有 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 測試套件。