in reply to Using null filehandle

What lines are missing? Lines from the beginning of the file, from the end, or just random lines throughout?

Can you come up with a simpler testcase that demonstrates the problem? That will probably help you identify what's going on, and make it easier for people to help you.

Since apparently your data is showing up on the console but not in your file, it may be a buffering problem. Output to files is buffered, and if your program crashes or is killed instead of exiting normally, the last bit of the buffer may not get flushed properly. Try putting an explicit close statement at the end of your loop, check it's error return, and print that you've closed the file succesfully; that may help identify the problem.

Replies are listed 'Best First'.
Re^2: Using null filehandle
by digger (Friar) on Jun 09, 2004 at 10:30 UTC
    Thanks for your reply,

    Sorry I wasn't clear about where the lines were missing. They are missing at the end of the file, not randomly throughout.

    I have narrowed the problem down to the handleSeps sub, which is the lion's share of the program. I will have more time today to dig into it a little more and pinpoint the exact problem.

    I have turned buffering off with no change in behavior, and it looks like my program never exits the loop, because the file never closes, and my program hangs at the console. This is even more perplexing, because if I just use an explicit filehandle (ie $myfile = $ARGV[0]; open IN ">$myfile";) everything works as expected.

    Thanks again,
    digger
      Sometimes "hanging at the console" is really "trying to read from standard input". Since the primary difference between the code you have above (assuming you meant open IN "<$myfile") is that <> will read from multiple files, it's possible that @ARGV contains more than you expect. In particular a single - character, it will try to read from standard input.

      You can print out @ARGV to see what files are being opened, or you can test eof on ARGV to tell when one file has closed and the next has opened (see the documentation for eof for an example).

      And still, it seems that turning off buffering should have fixed the problem. What code did you use to do that? $|=1 wouldn't work, because that only affects buffering for the currently selected filehandle (generally STDOUT).