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} }

$refreferencehash(关联数组);可以将其视为指向哈希的指针。可以说是因为->(“箭头”)运算符dereferences,而其右边的{...}意味着在它的左侧必须有一个哈希引用。这将返回它指向的值。

在这种情况下,与之解除引用的键(关联数组的索引)包含索引@struct2处数组$value的元素;该元素是另一个哈希引用,使用键field1(字符串常量)取消引用(索引)。

这将返回另一个哈希引用,然后使用键struct_insideStruct2(字符串)将其索引(取消引用),然后再次返回哈希引用。

最后一个索引使用一个密钥,该密钥本身是通过使用密钥$ref2(字符串)解引用另一个哈希引用field而产生的。

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

如果您仍然希望确实确实在C语言中做这种事情,您可以可以。可能希望找到一个好的哈希实现(或使用struct并仔细地嵌套它们),并可能使函数指针的语法等变得不完整。但我建议您不要参与所有这些工作。

相反,一旦您理解了上面解释的深层嵌套数据结构及其代表的数据,便可以找到一种方法来以本机C方式在代码中实现其含义和作用。我们始终希望使用手头语言固有的逻辑,技术和习语。

与链接的文档一起,也可以看到简短而可爱的perlintro。 Perl参考的完整参考是perlref


通常,此类“裸词”必须用引号,'string'(或使用""q()qq()运算符。 )。但是,如果这是{}之间的唯一内容,则可以省略引号。