Я реализую сетевой клиент, который отправляет сообщения на сервер. Сообщения представляют собой потоки байтов, и протокол требует, чтобы я заранее отправлял длину каждого потока.
Если сообщение, которое я получил (с помощью кода, использующего мой модуль), является байтовой строкой, то длина достаточно легко определяется с помощью 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;
Это правильный способ справиться с этим? Пока вроде работает, но я еще не проводил серьезного тестирования. Какие потенциальные подводные камни существуют при таком подходе?
Спасибо