Я думаю, что у вас случайно есть дополнительный слой в ваших данных.
Когда вы используете квадратные скобки, вы фактически используете конструктор анонимного массива. Это возвращает ссылку на массив, который является скаляром (один элемент). Вы, вероятно, не хотели назначать это массиву, поскольку вы получаете массив из одного элемента, где этот один элемент является ссылкой. В результате получается двухуровневый ха sh:
my @days = [ 'a', 1, 2 ]; # probably wrong
Поскольку ссылка на массив является скаляром, вы, скорее всего, хотите присвоить его скаляру с символом $
(один элемент). вы не используете @
, потому что ссылка указывает на массив. Символ больше относится к контейнеру, чем к данным:
my $days = [ 'a', 1, 2 ];
Когда у вас есть ссылка на массив, есть различные способы получить его элементы. Так как это простой скаляр (не один элемент доступа к массиву или ха sh), вы можете использовать префикс @
(многоэлементный символ), чтобы рассматривать его как массив:
my @elements = @$days;
# OR
foreach my $element ( @$days ) {
say "Element: $element";
}
Вы можете даже интерполировать это как именованный массив:
say "Elements are @$days";