IMHO,
Device::SerialPort is something that could stand to be rewritten from scratch.
If you read the docs in the modules you'll see that the unix module is actually a port of the Win32 module (personally I'd feel better if it was the other way around). There are many functions that don't quite work right in Unix but are functional in the Win32 environment.
I actually had to write a wrapper for Device::SerialPort to make it somewhat more usable (i was doing automated installation/configuration through a serial cable), and would be glad to post it up, although I'm not sure it would help you with dialing stuff...
BlueLines
Disclaimer:
This post may contain inaccurate information, be habit forming, cause atomic warfare between peaceful countries, speed up male pattern baldness, interfere with your cable reception, exile you from certain third world countries, ruin your marriage, and generally spoil your day. No batteries included, no strings attached, your mileage may vary.