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

如何在Perl中初始化2D数组?,perl,arrays,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”)用作数组引用 此语法似乎只在打印“$frame_events[1]\n”工作时初始化1D数组。尽管Perl在赋值过程中没有给出任何错误。在P

如何在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”)用作数组引用


此语法似乎只在打印“$frame_events[1]\n”工作时初始化1D数组。尽管Perl在赋值过程中没有给出任何错误。

在Perl中不能有数组数组,只能有数组引用数组

my @frame_events = ([(1) x 10], [(1) x 10]);
print "$frame_events[1]->[1]\n";
特殊情况:可以省略相邻括号之间的指针解引用箭头(无论是方形还是卷曲):

通常情况下,您不能拥有:

  • 数组的数组(数组的数组…)
  • 哈希数组(of…)
  • 数组散列
  • 散列的散列
您可以拥有:

  • 数组引用的数组(数组引用的数组…)
  • 对散列的引用数组(对…)的引用数组
  • 数组引用的散列
  • 对散列的引用的散列
您还可以拥有:

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

另请参见。

在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
          ]
        ];

最快的方法是使用push命令

$size=10; 按@矩阵,[(0)x$size]表示(0..$size)


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

“在Perl中,一个包含两个数组的数组合并到一个数组中”——不准确。列表变平。此处没有数组。:)@马克:给一个人一条鱼,你今天就可以喂他了。教人捕鱼,你会养活他一辈子。Ry4n给了你鱼。Vlad Romascanu和SinanÜnür正在尝试教你渔业。请注意,这并不能阻止人们在日常对话中说“散列”、“散列数组”等,因为散列或数组中的每个值都是标量,所以我们都知道我们在谈论引用。要初始化一个N*N数组:
my@frame_events=(map{[(0)x$N],(1..$N)})实际上是一个10x11矩阵。
$VAR1 = [
          [
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1
          ],
          [
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            1
          ]
        ];