使用 Perl6 语法解析二进制结构

2024-03-28

使用 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(使用前将#替换为@)

使用 Perl6 语法解析二进制结构 的相关文章

随机推荐

  • 在javascript中访问数组中的数组

    我收到一个 JSON 回复 如下所示 order id 12 customer user user status Pending date added 02 09 2012 total 500 00 action text View hre
  • 如何使用回调来保证顺序执行?

    我正在尝试围绕回调进行思考 但我不明白回调是如何进行的保证将执行一条语句之后 就时间而言 另一个声明需要一个unknown多少时间 我不在乎承诺 等待 异步等但只是我想学习的简单回调 例如下面的例子 我的方法将在未知时间事件发生之前执行回调
  • 从网页中的 servlet 读取 Quicktime 电影?

    我有一个 Servlet 它通过从服务器读取文件来构造对媒体文件请求的响应 File uploadFile new File C TEMP movie mov FileInputStream in new FileInputStream u
  • 如何创建使用 ng-model 的角度日期选择器指令

    我为 jQuery UI 日期选择器创建了一个角度指令 问题是 当选择日期时 指令不会更新输入的 ng model 知道为什么吗 http jsbin com ufoqan 1 edit http jsbin com ufoqan 1 ed
  • 最小化/小型化可可 NSWindow 没有标题栏

    我被困住了 显然 因为我在这里发布了一个问题 我为我的 OS X cocoa 应用程序构建了自己的自定义窗口控件 关闭按钮效果很好 没问题 当我禁用标题栏时 最小化按钮根本不起作用 因此 当标题栏像上图一样打开并且我点击此方法时 最小化效果
  • 查询谷歌电子表格的特定工作表

    我正在尝试使用谷歌电子表格作为临时数据库 我已按照以下教程中的说明进行操作 一切正常 http www alatechsource org blog 2012 05 using the google spreadsheets data ap
  • PHP:如何自动加载接口和摘要

    我有这个自动装载机要自动加载的类classes最初 但现在我想自动加载interfaces and abstracts以及 所以我做了以下改变answer https stackoverflow com questions 7924782
  • 在 PHP echo 中嵌入 javascript

    echo td manuf td 上面的这个行得通吗 我正在从 mysql 数据库中提取结果来编辑内容 但需要 jQuery 功能来编辑它 因此嵌入了 javascript 变量 EDIT 抱歉 缺乏上下文 它与我在这里提出的另一个问题有关
  • 无法使用 ggsurvplot 从列表中使用 survfit 对象绘制 kaplan-meier 曲线

    我正在尝试使用 survminer 包中的 ggsurvplot 绘制 Kaplan Meyer 曲线 当我传递保存在列表中的 survfit 对象时 我无法绘制它 让我以肺部数据集为例 一切正常如下 library survival li
  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup
  • Grails 2.0 中带有新 where 查询的参数

    在 Grails 2 0 中定义 where 查询时是否可以使用参数 例如 def query Book where id it Book sub query find 5 我尝试运行该代码 但它在调用 find 时抛出 MissingMe
  • 创建一个包含比原始元素更多元素的 ReactiveUI 派生集合

    是否可以创建一个 ReactiveUI 派生集合 其中包含比原始集合更多的元素 我已经看到有一种方法可以过滤集合并选择单个属性 但我正在寻找相当于可枚举的 SelectMany 操作 为了说明这一点 想象一下尝试获取代表每个陷入交通拥堵的乘
  • 避免 printf() 中的尾随零

    我一直在发现 printf 系列函数的格式说明符 我想要的是能够打印小数点后最大给定位数的双精度 或浮点数 如果我使用 printf 1 3f 359 01335 printf 1 3f 359 00999 I get 359 013 35
  • C# 中图片框的图像之间的转换[重复]

    这个问题在这里已经有答案了 可能的重复 Windows 窗体图片框中的图像转换 https stackoverflow com questions 3270919 transition of images in windows forms
  • 当数据回发时,MVC 如何填充模型

    MVC对于如何将数据发送到浏览器非常清楚 您访问一个 URL 它运行代码来创建模型 将该类型化模型传递到视图中 然后视图根据模型的状态呈现 HTML 然而 我发现不太清楚的是 当用户在页面上提交表单时 MVC 如何将该表单映射回模型以在控制
  • 连接字符串中包含特殊字符的密码

    我需要从 ASP NET 应用程序连接到我的 Dynamics CRM 365 本地实例 我的问题是连接帐户的密码如下 T jL4O vc t 30
  • Service Fabric 重启应用程序

    我有一个在启动时从 KeyVault 读取的服务结构应用程序 当我们更改 KeyVault 值时 我们必须重新启动节点才能读取新值 这会导致同一节点上的其他应用程序出现故障 我正在尝试编写一个 PowerShell 脚本来重新启动服务结构应
  • iOS 8 上应用内购买失败,提示用户详细信息不正确

    我们有一个带有应用内购买功能的应用程序 该应用程序在 iOS 7 上运行良好 但在 iOS 8 上 当用户尝试在应用程序中购买任何内容时 应用程序内购买会失败 并显示错误 您输入的 Apple ID 无法 找不到或您的密码不正确 请重试 即
  • __libc_start_main@plt 如何工作?

    为了研究目标文件在linux中是如何加载和运行的 我制作了最简单的c代码 文件名为simple c int main 接下来 我创建目标文件并将目标文件另存为文本文件 gcc simple c objdump xD a out gt sim
  • 使用 Perl6 语法解析二进制结构

    使用 Perl6 解析二进制结构的最佳选择是什么 在 Perl5 中 我们在 Perl6 上有 pack unpack 方法 它们似乎是实验性的 是否可以使用 Perl6 语法来解析二进制数据假设我有一个文件 其中包含以下二进制格式的记录