I'm not all that familiar with the internal workings of S::WE, but that seems very odd. Are you sure the write() call is actually failing? I apologize if that's obvious, but I see from the documentation that it returns 0 on success, and your snippet doesn't include code that reports the error, so it seemed worth checking. Also, I haven't any other ideas at all, unless there's some bizarre issue with the filesystem your temp directory is on—I don't think I've ever seen code that produced that particular error. :-\
If God had meant us to fly, he would *never* have given us the railroads.