ファイル全体を一つのスカラー変数に代入するには
PerlでTeXの文書をちょちょっと変換するプログラムを作ろうとしたのだが、思わぬところで頓挫。Perlで処理する普通の作業ってのは、行単位で読み込んで処理して出力して、とかいうのが多い。よくあるサンプルを真似して作っていたのだが、大域変数$_ に入っているのがファイル全体だと思い込んでいたら、実は一行分だったのが迷走の原因だった。
ファイル全体、つまりすべての行を一つの文字列変数に代入するには、読み込む前に区切り記号を表す大域変数 $/ を未定義の状態、つまり undef にする。たったこれだけの為に、難渋してしまった。ということで、備忘録としてメモ。
{
local $/ = undef;
$_ = readline INFILE;
}
とすれば、ファイルハンドラー INFILE から読み込んだすべてのデータが $_ に入る。