Отправка бинарно-безопасных данных по сети на Perl

Я реализую сетевой клиент, который отправляет сообщения на сервер. Сообщения представляют собой потоки байтов, и протокол требует, чтобы я заранее отправлял длину каждого потока.

Если сообщение, которое я получил (с помощью кода, использующего мой модуль), является байтовой строкой, то длина достаточно легко определяется с помощью length $ string . Но если это строка символов, мне нужно массировать ее, чтобы получить необработанные байты. В основном я делаю следующее:

my $msg = shift;   # some message from calling code
my $bytes;
if ( utf8::is_utf8( $msg ) ) { 
    $bytes = Encode::encode( 'utf-8', $msg );
} else { 
    $bytes = $msg;
}

my $length = length $bytes;

Это правильный способ справиться с этим? Пока вроде работает, но я еще не проводил серьезного тестирования. Какие потенциальные подводные камни существуют при таком подходе?

Спасибо

5
задан friedo 14 October 2011 в 18:54
поделиться