Toda la información debe pasar por un proceso servidor, que guarde la información que se le envía, reenviar la información del emisor a los otros, control del acceso de los usuarios, guardar (o no) temporalmente la información...
Es lo mismo que hacen los servidores de IRC o mensajería instantánea (IM).
Bueno, hay una diferencia entre los dos: el servidor IRC reenvía los mensajes que llegan de los usuarios, a todos, pero solo a los que estén conectados en ese momento. Y el servidor de IM sabe que debe guardar los mensajes en caso de que un remitente no esté conectado, y enviarle el mensaje en cuanto se conecte. Depende de lo que quieras hacer, elegirás un método y otro. O inventarte un procedimiento nuevo.
Para IRC hay unos cuantos servidores en CPAN. Y para IM, hay proyectos interesantes, como por ejemplo
AcidIM (aunque no ha pasado de la versión 0.1, así que es muy posible que no esté completo). En Google se encuentran más (busca por
perl instant messaging).
Debes llevar un control por cada usuario. Aquí vienen muy bien los
arrays: con un shift() sacas el primer mensaje que le tienes que enviar, mientras que con push() almacenas el último que ha llegado.