• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl サブルーチンでのファイル出力結果おかしい)

perl サブルーチンでのファイル出力結果おかしい

このQ&Aのポイント
  • Perlサブルーチンでファイル出力結果がおかしい場合の解決方法
  • カレントディレクトリ内のファイル出力結果が不正な場合の対処方法
  • ActivePerl(v5.16.3)でのファイル出力結果が正しく表示されない問題の解決

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

> &do_dir('.'); > sub do_dir{ >  open(FILE2,'>list.txt') or die "$!"; >  ... >  &do_dir($filename); >  ... > close(FILE2); > } 質問のコードでは、do_dir サブルーチンを呼び出す毎に list.tex を再オープンするので、それまでに書かれた内容は消去されることになります。また、サブルーチンから戻った後は、ファイルハンドルがクローズされているので、その後のファイルは画面に書きだされますが、ファイルには記録されません。サブルーチン内の FILE2 のコードを外に出せば、すべてのファイルが書き出されると思います。 open(FILE2,'>list.txt') or die "$!"; &do_dir('.'); close(FILE2);

yam2012
質問者

お礼

do_file()の方だけに気を取られていて do_dir()が再帰呼び出しされていることを見落としていました。 教えていただきました方法で正しく表示されるようになりました。 ありがとうございました。

その他の回答 (1)

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

当該言語は知らないので見た感じですが、 sub do_file{  my $filename=shift;  return unless ($filename=~/\.*$/);  print "$filename\n";  print FILE2 "$filename\n"; } print前にreturnしていいの?

yam2012
質問者

お礼

対象以外のファイルを処理しないように returnさせているだけです。

関連するQ&A