IO::Handle->input_record_separator( EXPR )
$INPUT_RECORD_SEPARATOR
$RS
$/

輸入記錄分隔符號,預設為換行。這會影響 Perl 對於「一行」的定義。運作方式類似 awk 的 RS 變數,包括將空行視為終結符號(空行不能包含任何空格或 tab)。您可以設定為多字元字串,以符合多字元終結符號,或設定為 undef 以讀取至檔案結尾。如果檔案包含連續的空行,設定為 "\n\n" 的意義會與設定為 "" 略有不同。設定為 "" 會將兩個或更多連續的空行視為單一空行。設定為 "\n\n" 會盲目假設下一個輸入字元屬於下一個段落,即使它是換行。

local $/;           # enable "slurp" mode
local $_ = <FH>;    # whole file now here
s/\n[ \t]+/ /g;

請記住:$/ 的值是字串,不是正規表示式。awk 一定有某些地方比較好。 :-)

設定 $/ 為空字串(所謂的段落模式)值得特別注意。當 $/ 設定為 "" 且整個檔案以該設定讀取時,檔案開頭任何連續一個或多個換行符號的序列都會被捨棄。除了檔案中的最後一個記錄外,每個以兩個或多個換行符號結尾的字元序列都會被視為一個記錄,並讀取為以兩個換行符號結尾。如果檔案中的最後一個記錄以零或一個連續換行符號結尾,則該記錄會以該數量的換行符號讀取。如果最後一個記錄以兩個或多個連續換行符號結尾,則它會像所有前一個記錄一樣以兩個換行符號讀取。

假設我們將下列字串寫入檔案

my $string = "\n\n\n";
$string .= "alpha beta\ngamma delta\n\n\n";
$string .= "epsilon zeta eta\n\n";
$string .= "theta\n";

my $file = 'simple_file.txt';
open my $OUT, '>', $file or die;
print $OUT $string;
close $OUT or die;

現在我們以段落模式讀取該檔案

local $/ = ""; # paragraph mode
open my $IN, '<', $file or die;
my @records = <$IN>;
close $IN or die;

@records 將包含這 3 個字串

(
  "alpha beta\ngamma delta\n\n",
  "epsilon zeta eta\n\n",
  "theta\n",
)

$/ 設定為整數、包含整數的純量或可轉換為整數的純量的參考,將嘗試讀取記錄而非行,其中最大記錄大小為參考整數數量的字元。因此

local $/ = \32768; # or \"32768", or \$var_containing_32768
open my $fh, "<", $myfile or die $!;
local $_ = <$fh>;

將從 $fh 讀取不超過 32768 個字元的記錄。如果您不是從面向記錄的檔案讀取(或您的作業系統沒有面向記錄的檔案),則每次讀取時可能會取得完整資料區塊。如果記錄大於您設定的記錄大小,您將會分批取得記錄。嘗試將記錄大小設定為零或更小已不建議,且會導致 $/ 的值為「undef」,這將導致讀取整個檔案(的其餘部分)。

從 5.19.9 開始,將 $/ 設定為任何其他形式的參考將會擲出致命例外。這是為了準備未來支援設定 $/ 的新方法。

僅在 VMS 上,記錄讀取會繞過 PerlIO 層和任何相關緩衝,因此您不得在同一個檔案處理器上混合記錄和非記錄讀取。記錄模式僅在兩種模式使用相同的緩衝層時與行模式混合。

您無法在處理器上呼叫 input_record_separator(),只能作為靜態方法呼叫。請參閱 IO::Handle

另請參閱 perlport 中的 「換行符號」。另請參閱 "$."

助記符:引用詩歌時,/ 用於區分行界。