[英]How do I read paragraphs at a time with Perl?
當我寫
#!/usr/bin/perl -w
use strict;
while( <DATA> ) {
print "\n-------------------------\n\n";
print;
<>;
}
每次“返回”后,我得到一行。
為什么每個“返回”一段之后我都看不到下一個腳本?
#!/usr/bin/perl -w
use strict;
local $/ = "";
while( <DATA> ) {
print "\n-------------------------\n\n";
print;
<>;
}
__DATA__
line one
line two
line three
line four
line five
line six
line seven
line eigth
line nine
line ten
line eleven
line twelve
在第一個腳本中,將$ /變量設置為默認“ \\ n”,<DATA>一次將僅返回一行。
我相信第二個腳本可以滿足您的要求,只是<>不會在'return'上終止讀取,而是在<ctrl-d>上由於您的$ /設置終止讀取(正如其他人指出的,<>讀取來自STDIN,但我想您已經知道並且正在使用它來調節輸出)。
如果您真的想通過“ return”調節輸出,則需要在循環中使用$ /進行更多操作。
while( <DATA> ) { print "\n-------------------------\n\n"; print; $/ = "\n"; # default so that the following terminates the read on 'return' <>; $/ = ""; }
我想你在期待這條線
local $/ = "";
改變行為
<DATA>
保持讀取直到數據結束。
但實際上需要這樣的事情
{
local $/; # $/ becomes undef in this block
...
}
啟用Slurp模式 (並將該模式包含在{curlys}內部的范圍內)。
實際上,這是在說“忘記將換行符視為記錄結束標記”,
除此之外,您的代碼中還有一個戰斗機 !
while( <DATA> ) {
print "\n-------------------------\n\n";
print;
<>; # <-- Feel the power of the DARK SIDE!!!
}
這個小家伙會從STDIN而不是從DATA讀取-這真的是您想要的嗎?
在段落模式下以交互方式使用<>會造成混亂。 當您點擊“ return”時,它不會返回; 相反,它將讀取直到獲得一個非空行(段落的開頭),然后讀取直到獲得一個空行(該段落的結尾),然后繼續讀取直到獲得一個非空行(該段落的開頭)下一段的內容-將被緩沖,不返回),因此它知道它已丟棄任何多余的空行。
也許您應該使用:
local $/ = "\n"; <>
在循環的末尾。 或者也許是POSIX :: getchar()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.