如何在Perl中初始化2D数组?

Mar*_*ark 8 arrays perl

如何在Perl中初始化2D数组?

我正在尝试以下代码:

 0 use strict;
10 my @frame_events = (((1) x 10), ((1) x 10));
20 print "$frame_events[1][1]\n";
Run Code Online (Sandbox Code Playgroud)

但它给出以下错误:

在./dyn_pf.pl第20行使用"strict refs"时,不能使用字符串("1")作为ARRAY引用.

这种语法似乎只是初始化一维数组,因为打印"$ frame_events [1] \n"有效.虽然Perl在分配期间没有给出任何错误.

vla*_*adr 13

你不能在Perl中有一个数组数组,只有一个数组引用数组.

my @frame_events = ([(1) x 10], [(1) x 10]);
print "$frame_events[1]->[1]\n";
Run Code Online (Sandbox Code Playgroud)

特殊情况:您可以省略相邻括号之间的指针解引用箭头(无论是方形还是卷曲):

print "$frame_events[1][1]\n";
Run Code Online (Sandbox Code Playgroud)

一般来说,你不能有:

  • 数组数组(数组......)
  • 哈希数组(......)
  • 数组哈希
  • 哈希的哈希.

可以:

  • 对数组的引用数组(对数组的引用 ...)
  • 哈希引用数组(引用 ...)
  • 数组引用的哈希值
  • 的散列引用到哈希

你也可以:

  • 标量数组
  • 标量数组的引用数组
  • 标量数组引用数组的引用数组
  • 标量散列的引用数组
  • 等等

  • 请注意,这并不能阻止人们在日常会话中说"哈希哈希","哈希数组"等等,因为它理解*哈希或数组中的每个值都是标量,所以我们都知道我们在谈论参考文献. (3认同)