Regarding the $read, the only thing that I can see as a possibility is that your usage of $shortfn might be making the $read look for an incorrect file. Try your code without the $shortfn in the $read and the /write lines.

As to the difference between iswm and isin, sorry, but I'm not sure of the main difference myself.