c - Perl 结构流向 C
问题描述
我已经开始在 Perl 中编写一个程序,并且必须将其转换为 C。
有很多子程序可以访问结构成员,这对我来说是不熟悉的,因为我对 Perl 语法和结构流几乎一无所知。例子:
$ref->{$struct2[$value]->{field1}}->{struct_insideStruct2}->{$ref2->{field}}
$ref 是第三种结构
$ref2 是 struct1 类型的参数的本地副本
我的问题是:如何在 C 中创建这样的行?
我需要创建嵌套的多个结构吗?
我需要了解 Perl 中的多访问运算符是如何工作的,以及我是否可以在 C 中创建类似的东西,在此先感谢。
解决方案
我建议不要尝试直接在语言之间进行翻译,因为这可能会导致代码笨拙且不自然。正如下面进一步评论的那样,这里肯定会出现这种情况。我能为这个任务做的最好的就是解释这个表达式的作用
$ref -> { $struct2[$value]->{field1} }
-> { struct_insideStruct2 }
-> { $ref2->{field} }
$ref
是对哈希(关联数组)的引用;可以将其视为指向哈希的指针。可以看出,因为("arrow") 运算符取消引用,而其右侧的 表示其左侧必须有一个哈希引用;这返回一个它指向的值。->
{...}
@struct2
在这种情况下,取消引用它的键(关联数组的索引)涉及索引处的数组元素$value
;该元素是另一个哈希引用,使用键field1
(字符串文字†</sup>)取消引用(索引到)。
这返回的是另一个哈希引用,然后使用键struct_insideStruct2
(字符串)将其索引到(取消引用),这又返回一个哈希引用。
最后一个用一个键索引,该键本身是通过$ref2
用一个键field
(字符串)取消引用另一个散列引用产生的。
这是一个 Perl复杂数据结构的例子。你喜欢吗?我不,不是很多。即使在 Perl 中,理想情况下我也希望看到它被重写为一个类,因为它太深太宽,因此它包含了太多的复杂性,而没有任何类可以提供的支持结构。
如果你仍然希望确实并且真的在 C 中做那种事情,你可以. 可能想找到一个好的散列实现(或使用struct
s 并小心地嵌套它们),并且可能想清除你的函数指针语法等。但我建议不要参与所有这些。
相反,一旦你理解了上面解释的深层嵌套数据结构,以及它所代表的数据,就可以找到一种方法来以原生 C 方式在你的代码中实现它的含义和作用。我们总是想使用手头语言的逻辑、技术和习语。
除了链接的文档,还可以看到简短而甜蜜的perlintro。Perl 参考资料的完整参考资料是perlref。
†</sup> 通常这样的“裸词”需要在引号下,'string'
(或使用""
,或q()
或qq()
运算符...)。但是,如果这是唯一的事情,{}
那么可以省略引用。
推荐阅读
- blazor - Blazor.Client 在客户端启动时看不到 Blazor.Server,断点不起作用
- jsf - 如何以编程方式评估管理 bean 中的 jsf?
- python - 计算以python中所有字母开头的单词数
- html - Flex 容器没有占据全高 - 使用了 align-items: 'stretch" 并且没有效果
- gis - 使用 python 剪辑卫星图像中的颜色错误(使用较小的栅格来剪辑较大的多波段栅格 (Geotiff))
- php - WooCommerce COD 收费基于第二次支付的存款金额
- r - 尝试在 R 中加载 LAS 文件
- python - Python:如何将多个 html 文件的内容保存到 html 链接中,从
tag?</h1> <div id="body"><p>I have a Python code that works fine for parsing some data on html files. At the end of the code I must save the html files by tag. For example, I have this 3 html - ios15 - Xcode 13,iOS 15 签名和过期帐户的问题,任何连接?
- python - 使用 3D 绘图沿 y 轴绘制直线