使用 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"写道:
当时他们还整理了以下相关链接:
packing foo { template bar { ... } }
construct 加上他们的 much older "very old, low level types thoughts" 的新想法。 关于raku - 使用 Perl6 语法解析二进制结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48202133/