Welp, you can do "A" just by reading from the comm line -- the modem if it supports CallerID or ANI will spit out the phone number on ring. "B" get more complicated -- on windows there is a API for extended voicemail modems called TAPI. As far as I know there is no direct perl binding to that. An article that talks about managing a modem with perl in windows is here
now, your post makes me think you are trying to do this on unix. in that case Device::vgetty is the way to go. You can get "B" by using the "RECEIVE_DTMF" event. This will tell you what DTMF was received (0-9,*,#). There is a nice example of this in the POD for Modem::Vgetty
. "A" then becomes diffucult because I do not think that vgetty reports callerid as an event -- nor have I found a way to pull that from the modem directly when vgetty is in control.