in reply to Lost characters using Device::Modem

I was bitten by the same bug some time ago. Try delaying, this delays by char:
map {$modem->atsend($_) and select undef,undef,undef,0.1 } split //, "AT+CGMS=$recipient\cm$msg\cz";

Seems like the modem's busy echoing (or not echoing ;) chars back while new chars arrive. Or the buffer is to short. Or something else ;-)

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}