Please let me know what I've overlooked.
Well, if the suggested idiom doesn't work under Windows, I'd argue that either Windows (or possibly Perl) is broken in that regard. But, of course, that doesn't solve your problem. I guess it's just as well that Chapter 18 suggests testing everything before you deploy it! ;-)
Although the recommendation in question doesn't claim to solve the problem of rerunnability, as it happens, the second suggested solution--using the IO::Insitu module--does use a back-up strategy to ensure that data is not lost if the program abends.