in reply to PERL and DTMF
According to the Audio::Data docs, + is overloaded for additive mixing of two Data objects. So just create a second Data object for your second tone, add them, and save it back to the original object. Make sure when you call silence() that you are not overwriting the original data. You may have to use ->append($data_object->silence(...)) instead of calling silence() directly.
If, instead, you are trying to concatenate sounds (one sound plays after the other... for instance, a monotonic telephone dialing sequence), then you will have to use appends. Regardless, right now you are just overwriting your previous data with the last tone (or possibly the silence()).
Check the CPAN docs, they are very clear. It seems like you don't quite understand how Audio::Data represents and processes data. It's sample-based, not some group of functional representations (which could, theoretically, happily co-exist... but even so the usage syntax would probably be different than what you have).
~e