Как мне правильно распаковать объект Git в Raku Perl 6?

#git #raku

#git #raku

Вопрос:

У меня есть следующий фрагмент кода Python:

 import zlib

def object_read(repo, sha):
    path = repo   "/objects/"   sha[0:2]    "/"   sha[2:]

    with open (path, "rb") as f:
        raw = zlib.decompress(f.read())
        return len(raw)

print(object-read(".git", "1372c654fd9bd85617f0f8b949f1405b0bd71ee9"))
  

и один из его аналогов на P6:

 #!/usr/bin/env perl6
use Compress::Zlib;

sub object-read( $repo, $sha ) {
    my $path = $repo ~ "/objects/" ~ $sha.substr(0, 2) ~ "/" ~
               $sha.substr(2, *);

    given slurp($path, :bin) -> $f {
        my $raw = uncompress($f).decode('utf8-c8'); # Probable error here?!
        return $raw.chars;
    }

}

put object-read(".git", "1372c654fd9bd85617f0f8b949f1405b0bd71ee9")
  

Однако, когда я их запускаю, они возвращают мне отдельные результаты:

 $ python bin.py
75
$ perl6 bin.p6
74
  

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

1. Что такое «raku»?

2. Почему вы вызываете decode в Perl6, но не в версии Python?

3. @melpomene Raku — это кодовое имя для Perl 6. Смотрите перенаправление на raku.do

4. @phd О, я нашел это в FAQ : » Perl 6 (который также можно назвать «Raku») — это определение языка. » (А Rakudo — это реализация.) Для меня это новость. В прошлый раз, когда я смотрел, его там не было. 🙂 Но тогда почему существуют отдельные perl6 / raku теги?

5. Это долгая и болезненная история. Мои личные соображения: liztormato.wordpress.com/2018/11/06/on-raku и liztormato.wordpress.com/2018/11/09/on-raku-again . Пожалуйста, обратите внимание, что это личные мнения.

Ответ №1:

@melpomene попал в точку. Вы не выполняете декодирование на Python, и количество байтов в необработанном файле может быть немного больше; вставить

 say uncompress($f).elems;
  

перед декодированием в $raw и вы увидите, что он включает (в файл и в мою систему) на 2 байта больше. Рендеринг через utf8-c8 может объединить пару байтов в одну кодовую точку (или больше). В общем случае количество кодовых точек будет меньше, чем количество байтов в потоке ввода-вывода.

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

1. Спасибо, jjmerelo! Это был мой первый раз, когда я читал двоичные данные, и я думаю, это видно ;-)!