• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:while(<ハンドラ>) {} で行数をカウント)

行数をカウントするプログラムで期待する結果が得られない

このQ&Aのポイント
  • 掲示板をperlで作るという課題に取り組んでいるが、行数をカウントするプログラムで期待する結果が得られない。
  • プログラムはPOSTされたコメントをdata.datに追記するもので、行数をコメントの先頭に表示する。
  • 試した結果、open(HOGE, "&gt;&gt; $myfile");やwhile(&lt;HOGE&gt;){$count = $count + 1;};の変更でも結果に変化はなかった。

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.2

+>>をご使用なので、ファイルハンドラが最後に移動してないでしょうか。 ハンドラが最後に移動しているので、whileは実行されておらず、常にファイル末尾に1行目が出力されるというシナリオを想像します。 Perlfaqを使用して… $lines = 0; $filename = "yahho.txt"; open(FILE, "+<$filename") or die "Can't open `$filename': $!"; #open に+<を使用 while (sysread FILE, $buffer, 4096) { $lines += ($buffer =~ tr/\n//); print "p"; } print FILE ++$lines . "やっほ~\n"; 注意 open時にファイルの存在は保証してください。存在しない場合エラーです。

jussmen_1979
質問者

お礼

hirotn 様 ご指摘のとおりでした。ありがとうございました。

その他の回答 (2)

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.3

当該Perlfaqは以下のURLです。 http://perldoc.jp/docs/perl/5.14.1/perlfaq5.pod 「あるファイルの行数を数えるには」 が該当します。 数えた後はファイルハンドラは終端になっているのでご希望の処理を追加するようにしています。

jussmen_1979
質問者

お礼

こういったサイトをまず最初に確認すべきなのですね。 教えていただきありがとうございます、次回からまずは perldoc から情報を探してみます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

open(HOGE, ">> $myfile"); は「追加書き込み」モードでファイルを開きます。 while(<HOGE>){ で「読む」ことができるでしょうか?

jussmen_1979
質問者

お礼

kmee 様 ご返信ありがとうございます。 +>> でも試してみたところ意図通りに動かなかったのですが、 +> だと期待する動作が得られました。 細かな違いまで意識が及んでおらず、気がつけておりませんでした。 コメントありがとうございました。