Perl 结构流向 C

Perl structure flow to 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是一个reference to a hash (associative array); it's OK to think of it as a pointer to a hash. One can tell because the -> ("arrow") operator dereferences,它右边的{...}表示它左边一定有hash引用;这个 returns 它指向的值。

在这种情况下,取消引用的键(关联数组的索引)涉及索引 $value 处数组 @struct2 的一个元素;该元素是另一个哈希引用,使用键 field1 取消引用(索引)(字符串文字)。

这个 returns 是另一个哈希引用,然后用键 struct_insideStruct2 (字符串)索引(解除引用),这又是一个 returns 哈希引用。

最后一个索引是用一个键索引的,该键本身是通过取消引用另一个散列引用 $ref2 产生的,键是 field(字符串)。

这是一个 Perl 示例 complex data structure。你喜欢吗?我没有,不是很多。即使在 Perl 中,理想情况下我也希望看到它被重写为 class,因为它太深太宽,所以它包含了太多的复杂性而没有任何 class 可以提供的支持结构。

如果您仍然希望在 C 中确实并且真的做那种事,您可以。可能想要找到一个好的散列实现(或使用 structs 并仔细嵌套它们),并且可能要清除函数指针语法等。但我建议不要陷入所有这些。

相反,一旦您理解了上面解释的 deep-nested 数据结构及其表示的数据,找到一种方法以原生 C 方式在您的代码中实现它的含义和作用。我们总是希望使用手头语言的逻辑、技术和习语。

除了链接文档外,还可以看到简短而有趣的 perlintro. The full reference for Perl's references is perlref


通常这样的“裸词”需要在引号下,'string'(或使用 "",或 q()qq() 运营商...)。但如果那是 {} 之间唯一的事情,那么引号可以省略。