Personally, I like XS, but I think SWIG is just as capable. Use whatever feels natural to you :-)
Just a remark: the hashing functions in the development version of perl have changed recently. You might find it interesting. See this thread on perl5-porters.