вторник, 3 ноября 2015 г.

[Перевод] Буферы и двоичный ввод и вывод в Perl6 @habrahabr


В Perl 5, начиная с версии 5.8, неплохо реализована поддержка Unicode – но люди всё равно жаловались на сложности в её использовании. В основном из-за того, что программисту нужно отслеживать, какие строчки были декодированы, а какие надо обрабатывать как двоичные данные. И нет надёжного способа посмотреть на переменные и понять, двоичные это строчки или текстовые.

В Perl6 эту проблему решили вводом отдельных типов. В Str хранится текст. Строковые литералы в Perl6 имеют тип Str. Двоичные данные хранятся в объектах Buf. И перепутать их уже нельзя. Конвертация между ними осуществляется при помощи методов encode и decode.

    my $buf = Buf.new(0x6d, 0xc3, 0xb8, 0xc3, 0xbe, 0x0a);
    $*OUT.write($buf);

    my $str = $buf.decode('UTF-8');
    print $str;



У обеих операций эффект одинаковый – они выводят в стандартный выходной поток «møþ» и перевод строки. Buf.new(...) принимает список целых от 0 до 255 – байты из которых и строится новый буфер. $*OUT.write($buf) выводит буфер из $buf в стандартный выходной поток.

$buf.decode('UTF-8') декодирует буфер и возвращает объект Str (или падает, если в буфере не содержится допустимая строка в UTF-8). Обратная операция — $Buf.encode($encoding). Str можно вывести просто через print.
Читать дальше →

via Хабрахабр / Интересные / Тематические публикации http://ift.tt/1Ww2twv

Комментариев нет:

Отправить комментарий