in reply to Windows NT CGI File Upload Problem

Just a quick thought: This can happen if the file starts with a CTRL-Z and you didn't use binmode() under Win32.

If you don't know that the file(s) you are dealing with will be just text, then you should use binmode(). Unfortunately, binmode() is a no-op under Unix so it doesn't get used much and the fact that this is a problem doesn't get noticed much.

        - tye (but my friends call me "Tye")

Replies are listed 'Best First'.
RE (tilly) 2: Windows NT CGI File Upload Problem
by tilly (Archbishop) on Sep 14, 2000 at 19:55 UTC
    However note that under VMS binmode is not a no-op and is sometimes very definitely not desired. Sorry, I don't know details beyond the fact that it has to do with VMS having a much more complex filestructure than Unix, I was just told that once by the maintainer of the VMS port.

      Actually, under VMS (last time a checked, which was quite a while ago), simply writing files from C (and thus from Perl) generates strange files. VMS files are handled by RMS and the "R" stands for "records" so VMS files are not all streams. Until C got ported to VMS, VMS didn't even have support for streamed files (that I could find).

      I could see binmode() creating some kind of raw stream instead of the default "stream, LF-terminated records" format that C creates by default (though I don't think it used to). This might cause normal VMS stuff to puke because "read next record" gives you something huge. But that is already a problem for binary data in a "stream, LF-terminated records" file. Which makes me think that bindmode() should (once again?) be a no-op under VMS. But this is all wild speculation (which often prompts someone who knows something to reply; so I won't delete it).

      But you can probably recover the damage from the use of binmode() under VMS using its standard file conversion utilities. The damage from no binmode() under other OSes usually isn't reversible.

              - tye (but my friends call me "Tye")
        Know or can learn you mean? :-)

        Your description rings a bell, and in fact the behaviour has been fixed. So on 5.6 (and presumably forward) on VMS binmode is now a no-op. Earlier Perls can encounter a problem.