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

时间:2010-03-13 02:40:53

标签: perl arrays

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

我正在尝试以下代码:

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

但它会出现以下错误:

  

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

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

4 个答案:

答案 0 :(得分:13)

Perl中不能有一个数组数组,只有一个数组引用数组。

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

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

print "$frame_events[1][1]\n";

一般来说,不能拥有:

  • 数组数组(数组......)
  • 哈希数组(of ...)
  • 数组哈希
  • 哈希哈希。

可以拥有:

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

你也可以:

  • 标量数组
  • 标量数组引用的数组
  • 标量数组引用数组的引用数组
  • 标量哈希的引用数组

答案 1 :(得分:7)

答案 2 :(得分:1)

在Perl中,一个包含两个数组的数组将合并为一个数组。如果不希望它们连接,您需要内部数组的引用。这是您的代码转储:

use strict;
use Data::Dumper;
my @frame_events = (((1) x 10), ((1) x 10));
print Dumper(\@frame_events);

结果:

$VAR1 = [
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1
        ];

如果您使用以下代码切换到数组引用创建者,括号而不是父项:

use strict;
use Data::Dumper;
my @frame_events = ([(1) x 10], [(1) x 10]);
print Dumper(\@frame_events);

你明白了:

$VAR1 = [
          [
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1
          ],
          [
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1
          ]
        ];

答案 3 :(得分:0)

最快捷的方法是使用push命令。

$ size = 10; 推@matrix,[(0)x $ size]为(0 .. $ size);

这将创建一个用零初始化的10x10数组。