如何在Perl中处理变量维数组

时间:2019-05-25 16:02:02

标签: perl multidimensional-array

我有一个子对象,它接收多维数组的引用并对其进行处理。

问题是,基础数组可能是2D或3D,或者是最多包含两个字段的2D数组,这些字段是对1D数组的引用。

是否可以检测数组的维数,以便我可以在此子对象中处理所有这些情况? 还是我必须写几个子来处理所有不同的尺寸?

1 个答案:

答案 0 :(得分:3)

与大多数动态语言一样,Perl中的数组只是一维的。通常,通过将数组的每个元素作为对另一个数组的引用来表示二维数组-因此,您实际上拥有一个数组数组。如果内部数组的每个元素也是对第三个数组的引用,那么您实际上就是一个三维数组。

如果您事先不知道数组的深度,可以使用the ref function来检查元素是否是引用。如果是这样,则取消引用它以从数组中获取另一个维度并对其进行处理。如果不是,则期望它是数组的叶子元素。

一个潜在的陷阱是Perl不在数组上强制执行任何类型的结构。不同的元素可以是不同的类型。这意味着子数组可以与简单数字或字符串一起存在于同一数组中。取决于数组构造代码,以确保单个数组不会混合和匹配维。