使用 Perl6 解析二进制结构的最佳选择是什么。

在 Perl5 中,我们在 Perl6 上有打包/解包方法,它们似乎是实验性的

是否可以使用 Perl6 语法来解析二进制数据,假设我有一个文件,其中包含以下二进制格式的记录:

struct record {
short int ut_type;

char ut_line[UT_LINESIZE];
char ut_id[4];
char ut_user[UT_NAMESIZE];
char ut_host[UT_HOSTSIZE];


}

可以用 Perl6 语法解析这个文件吗?

最佳答案



特别是考虑到您了解 P5 的打包/解包,新的 P5pack 模块似乎是合适的解决方案。 (我还没有测试过它。它是新的。Aiui 它没有实现所有功能,也没有盲目地模仿 P5 的包。但它是 Liz。)

如果上面链接的 P5 包接口(interface)的新纯 P6 实现不能满足您的需求,另一个明显的解决方案是在您的 P6 代码中使用由常规 perl 5 二进制文件执行的原始 P5 函数。以下内容不完整/未经测试,但我的意思大致如下:

use Inline::Perl5 ; my \P5 = Inline::Perl5.new ;

my $mem = Buf ... ;

my $hex = P5.call('unpack', 'H*', $mem) ;

(或者,相反,将主线编写为 P5 代码,通过 Inline::Perl6 添加 P6 代码。)

在当前版本的 P6 中,即 6.c ,语法只能处理文本。

2 年前 P6er "skids"写道:



当时他们还整理了以下相关链接:
  • skid 对 a packing foo { template bar { ... } } construct 加上他们的 much older "very old, low level types thoughts" 的新想法。
  • ShimmerFairy 的 "thoughts on possible binary grammars in P6 (incomplete)"
  • Juerd 的 "RFC: A more Perl6-esque "unpack""
  • smls 的 "Binary Parsing in Perl 6"
  • masak 的 "A first approach to pack/unpack in Perl 6"
  • jnthn 的 "talk on Grammar::Generative" (video)
  • 关于raku - 使用 Perl6 语法解析二进制结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48202133/

    10-11 06:53