如何在Perl中初始化2D数组?
如何在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
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…)
- 数组散列
- 散列的散列
- 数组引用的数组(数组引用的数组…)
- 对散列的引用数组(对…)的引用数组
- 数组引用的散列
- 对散列的引用的散列
- 标量数组
- 标量数组的引用数组
- 标量数组的引用数组的引用数组
- 标量散列的引用数组
- 等等
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
]
];