Ok at last I found out what I am doing wrong, I just used the default stream. With an stream properly defined I can send and receive text.
my $st=$con->new_stream(Sys::Virt::Stream::NONBLOCK);
$dom->open_console($st, undef, 0);
When a stream is correctly defined and the program is not just taking the default - which evidently does not work - everything works just fine - very slow but fine.
Just in case someone has the same problem.