Сокеты - это поток байтов, а не поток символов. Это означает, что вам нужно кодировать строку символов в байты. Возможны различные кодировки символов, но обычно используется UTF-8 , где один символ представлен чем-то от одного до шести байтов (один байт для ASCII et c).
use Encode 'encode';
my $bytes = encode('UTF-8', $text);
$socket->send($bytes);
Обратите внимание, что вам нужно сделать обратное на стороне получателя, если вы хотите вернуть символы из байтов, т.е. использовать Encode::decode
.
См. Также соответствующие части в документации, особенно в perlunifaq части о том, когда кодировать и что происходит, если вы не кодируете.