Most likely you can easily swap out WWW::Mechanize for your hand-rolled version of the user agent. If it works with WWW::Mechanize, then something is weird in your cookie handling.
You haven't shown whether the cookie has some path or something that would restrict it from being sent. See below for code by Anonymous Monk that outputs some more debug information.
Yep, I'll try to write another helper script using WWW:Mechanize instead, to see if it fares any better. As for this one, well, the ugly hack version works so...