Списки в Perl не являются структурами данных, это позиции в исходном коде, определяемые контекстом вокруг них. Списки — это в основном временные структуры, которые Perl использует для перемещения данных. Вы взаимодействуете с ними со всем синтаксисом Perl, но вы не можете работать с ними как с типом данных. Наиболее близким к списку типом данных является массив.
my @var = (1, 2, 3); # parens needed for precedence, they do not create a list
^ an array ^ a list
say 1, 2, 3;
^ a list
say @var;
^ a list (of one array, which will expand into 3 values before `say` is called)
Когда вы пишете [1, 2, 3]
, вы создаете ссылку на скалярный массив. Эта ссылка на массив инициализируется списком 1, 2, 3
, и это то же самое, что создать именованный массив и получить ссылку на него:
[1, 2, 3] ~~ do {my @x = (1, 2, 3); \@x}
Поскольку конструкция [...]
создает скаляр, вы должны хранить ее в скаляре:
my $array = [1, 2, 3];
for my $elem (@$array) { # lexical loop variable
print $elem."\n";
}
Поскольку вы хотите работать со всем массивом, а не только со ссылкой, вы помещаете @
перед $array
, что разыменовывает сохраненную ссылку на массив.
person
Eric Strom
schedule
16.05.2011