I'd second the IO::Socket idea (or third, or fourth...)
I'll even justify it for you:
- Not using it means one of two things. either you have to rework the server to allow for http access. (a headache in the making.) or work with data files that potentially could be out of date right after they're written (might not be much of a problem, but i don't know much about your game)
- using it would allow you to move the client to another machine dependant on the load it will take.
- do it right and all the clients can communicate with the server in the same way. keeps it nice and simple.
from my perspective, if you can keep the server simple (all the clients use the same protocol to access it) then it keeps debugging down to a minimum. It also splits it up functionally, so each component does one thing, and (hopefully) does it well.
The soap idea is similar in principal, and might be a good idea. (not sure what the protocol is like, but I've heard good things about it) If its sufficient to get your data moved, then go for it. no point doing work you don't have to after all. if your other clients can use it, then congrats, you've just found a drop in networking module.