-n, -pBEGIN


一見,BEGIN { } を使わずとも同じ処理ができるように思えるかもしれないが,次のようなやり方には問題がある。

   % perl -ne '$/ = undef; print if (/\bRussia/i);' voa/*

BEGIN を使わずに処理した場合,新規に指定した区切り文字が適用されるのは,2番目のレコードを読み込む時になってからである。-n により最初のレコードを読み込む時にはデフォルトの区切り文字が有効で,最初のレコードは行となる。

  第1レコード: 最初のファイルの第1行
  第2レコード: 最初のファイルの2行目からファイル末まで
  第3レコード: 2番目のファイル
  第4レコード: 3番目のファイル
   :

結果だけを見ていると,正しく処理されているように見える場合が多く,間違いに気付きにくいので気を付けること。