使用 Perl6 解析二进制结构的最佳选择是什么?
在 Perl5 中,我们在 Perl6 上有 pack/unpack 方法,它们似乎是实验性的
是否可以使用 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 语法解析这个文件吗?
使用 Perl6 解析二进制结构的最佳选择是什么?
特别是考虑到您了解 P5 的打包/解包,新的P5pack https://github.com/lizmat/P5pack模块似乎是合适的解决方案。 (我还没有测试过。它是新的。Aiui 它没有实现所有功能,也没有模仿 P5 的包奴性地。但这是莉兹。)
如果上面链接的 P5 包接口的新纯 P6 实现不能完成您需要做的事情,另一个明显的解决方案是在您的 P6 代码中使用由常规 perl 5 二进制文件执行的原始 P5 函数。以下内容不完整/未经测试,但我的意思大致如下:
use Inline::Perl5 ; my \P5 = Inline::Perl5.new ;
my $mem = Buf ... ;
my $hex = P5.call('unpack', 'H*', $mem) ;
(或者,相反,将主线编写为 P5 代码,通过添加 P6 代码Inline::Perl6 https://metacpan.org/pod/Inline::Perl6.)
在当前版本的 P6 中,6.c https://docs.perl6.org/language/faq#Is_there_a_Perl_6_version_6.0.0?,语法只能处理文本。
2年前P6er“skids”写道:
“有足够多的人想要二进制语法,我认为它会成为现实” https://irclog.perlgeek.de/perl6/2016-01-06#i_11836303(写于2016年)。
当时他们还整理了以下相关链接:
撬装是新的想法a packing foo { template bar { ... } }构造 https://gist.github.com/skids/cfb129509b0849f50deb加上他们的更古老的“非常古老、低水平的思想” https://gist.github.com/skids/4998260.
微光仙子的“对 P6 中可能的二进制语法的思考(不完整)” https://gist.github.com/ShimmerFairy/72a25f87939aab077158
Juerd's “RFC:更像 Perl6 式的“解包”” https://gist.github.com/Juerd/ae574b87d40a66649692.
smls's 《Perl 6 中的二进制解析》 https://gist.github.com/smls/bc5d0fb42f199574e339.
masak's “在 Perl 6 中打包/解包的第一种方法” https://gist.github.com/masak/1239203.
jnthn's “谈论语法::生成”(视频) https://www.youtube.com/watch?v=RPQvtfwsilM.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)