PerlでTeXの文書をちょちょっと変換するプログラムを作ろうとしたのだが、思わぬところで頓挫。Perlで処理する普通の作業ってのは、行単位で読み込んで処理して出力して、とかいうのが多い。よくあるサンプルを真似して作っていたのだが、大域変数$_ に入っているのがファイル全体だと思い込んでいたら、実は一行分だったのが迷走の原因だった。

ファイル全体、つまりすべての行を一つの文字列変数に代入するには、読み込む前に区切り記号を表す大域変数 $/ を未定義の状態、つまり undef にする。たったこれだけの為に、難渋してしまった。ということで、備忘録としてメモ。

{
  local $/ = undef;
  $_ = readline INFILE;
}

とすれば、ファイルハンドラー INFILE から読み込んだすべてのデータが $_ に入る。

投稿者 sukarabe

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です