我想從從數據庫中檢索到的文本變量中提取段落。從文本中提取段落perl
用於提取文件處理我用下面的代碼的pargaphs:
local $/ = undef;
@paragarphs =<STDIN>
什麼是用perl從文本變數中擷取幾段的最佳選擇,如果有模塊上做這種類型的CPAN任務?
我想從從數據庫中檢索到的文本變量中提取段落。從文本中提取段落perl
用於提取文件處理我用下面的代碼的pargaphs:
local $/ = undef;
@paragarphs =<STDIN>
什麼是用perl從文本變數中擷取幾段的最佳選擇,如果有模塊上做這種類型的CPAN任務?
你快到了。將$/
設置爲undef
將一氣呵成在整個文本中。
你想要的是local $/ = "";
使段落模式,按照perldoc perlvar
(強調我自己):
$/
輸入記錄分隔符,默認換行符。這會影響Perl的 關於「行」是什麼的想法。像awk的RS變量一樣工作,如果設置爲空字符串( 空行不能包含任何空格或製表符),則包括 將空行視爲終止符。您可以將其設置爲 多字符字符串以匹配多字符終止符,或者設置爲 undef以讀取文件結尾。將其設置爲「\ n \ n」意味着 與設置爲「」時略有不同,如果該文件包含連續空行 。 設置爲「」時,會將兩個或更多個連續的空行視爲單個空行。設置爲「\ n \ n」 將盲目地假定下一個輸入字符屬於下一個 段落,即使它是換行符。
當然,也可以得到一個文件句柄從一個字符串,而不是一個文件的讀取:
use strict;
use warnings;
use autodie;
my $text = <<TEXT;
This is a paragraph.
Here's another one that
spans over multiple lines.
Last paragraph
TEXT
local $/ = "";
open my $fh, '<', \$text;
while (<$fh>) {
print "New Paragraph: $_";
}
close $fh;
輸出
New Paragraph: This is a paragraph.
New Paragraph: Here's another one that
spans over multiple lines.
New Paragraph: Last paragraph
如果文字是一個變量,例如:
$text = "Here is a paragraph.\nHere is another paragraph.";
或:
$text = 'Paragraph 1
Paragraph2';
你可以簡單地通過拆分爲 「\ n」 的文本獲得的段落。
@paragraphs = split("\n",$text);
如果你的段落是由雙換行符或(如在Windows中)\ n和\ r的組合來分隔,你可以相應地改變分割命令。
OP的原始代碼已經是這樣了(當不設置'$ /'時),並且不需要將整個文件讀入內存來執行。 –
你已經擁有的回答一個腳本(local $/ = "";
),但值得注意的是,有一行代碼有一個快捷方式:th e -00
選項。
perl -00 -ne '$count++; END {print "Counted $count paragraphs\n"}' somefile.txt
從man perlrun
:
-0八進制/十六進制]
指定輸入記錄分隔符($ /)[...]
特殊值00將導致Perl在第 模式下sl files文件。
您已更改您的代碼以反映我的答案。這會讓讀者閱讀這篇文章的人感到困惑。請回滾。 – Zaid
是的,我改變了它,但我的意思是有本地$/=「」 – smith
設置$ /無論你調用段落分隔符 – PSIAlt