Unfortunately, running system "type $fh"; doesn't produce any output, and I need a temp file that I can pass by name to an external command (putty -m) that doesn't accept open file handles or anything.

Google turned up this bit of disappointing information:
To ensure that the right amount of flushing occurs, the cache manager spawns a process every second called a lazy writer. The lazy writer process queues one-eighth of the pages that have not been flushed recently to be written to disk. It constantly reevaluates the amount of data being flushed for optimal system performance, and if more data needs to be written it queues more data. Lazy writers do not flush temporary files, because the assumption is that they will be deleted by the application or system. -- http://msdn.microsoft.com/en-us/library/windows/desktop/aa364218(v=vs.85).aspx?ppud=4

Maybe I need to skip File::Temp and just create my own "normal" file with a random name (e.g. "file.$$").