Как я инициализирую 2D массив в Perl?
Я пробую следующий код:
0 use strict;
10 my @frame_events = (((1) x 10), ((1) x 10));
20 print "$frame_events[1][1]\n";
но это дает следующую ошибку:
Не может использовать строку ("1") в качестве МАССИВА касательно в то время как "строгие судьи", используемые в./dyn_pf.pl строке 20.
Этот синтаксис только, кажется, инициализирует 1D массив как печать "$frame_events [1] \n" работы. Хотя Perl не дает ошибки во время присвоения.
В Perl не может быть массива массивов, только массив ссылок на массивы.
my @frame_events = ([(1) x 10], [(1) x 10]);
print "$frame_events[1]->[1]\n";
Особый случай: вы можете опустить стрелку разыменования указателя между соседними скобками (квадратными или фигурными):
print "$frame_events[1][1]\n";
Как правило, вы не можете иметь:
Вы можете иметь:
Вы также можете иметь:
См. также Массив массивов в Perl Data Structures Cookbook.
В 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
]
];