whileとforeachと行番号

以下のファイルを読込んで表示するだけのプログラムを作成します.

# 読込むデータ dat.dat
0000,apple
0010,banana
0020,cherry
  

whileを使って書くとこうなります.$はコマンドプロンプトです.

$ perl -e 'print while(<>)' dat.dat
0000,apple
0010,banana
0020,cherry
  

foreachでも同じように書けます.

$ perl -e 'print foreach(<>)' dat.dat
0000,apple
0010,banana
0020,cherry
  

行番号も出力します.

$ perl -e 'print "$.: $_" while(<>)' dat.dat
1: 0000,apple
2: 0010,banana
3: 0020,cherry
  

foreachでも同様に行番号を出力します.

$ perl -e 'print "$.: $_" foreach(<>)' dat.dat
3: 0000,apple
3: 0010,banana
3: 0020,cherry
  

whileでは表示している行の行番号が出ますが,foreachでは最後の行番号になります.