Здесь $databaseStatement->{NAME}
возвращает массив ref.
$tableColumns = $databaseStatement->{NAME};
Если бы вы набрали print $tableColumns
, вы бы увидели что-то вроде ARRAY(0x18af700)
.
Итак, это ссылка на массив, как вы получаете доступ к этому массиву? Вы разыменовываете это.
for my $entry ( @{ $tableColumns } ) { ... }
@$tableColumns
- это просто сокращенный синтаксис для разыменования.
Так в чем же смысл всего этого?
Perl не позволяет вам хранить списки внутри массива или как хеш-значение; Вы можете хранить только скалярные значения. Это включает ссылки , что позволяет, например, сохранять ссылки на массив или хэш внутри другого массива или хеша.
my @simpsons = ('Homer', 'Marge', 'Bart', 'Lisa', 'Maggie');
my %characters = (
simpsons => \@simpsons, # Create references to existing array
flanders => ['Ned', 'Maude', 'Rod', 'Tod'], # Anonymous array-ref
);
$simpsons[2] = 'Bort'; # This will affect the entry in the hash
for my $character ( @{ $characters{simpsons} } ) {
print $character . "\n";
}
Обратите внимание, что я не могу использовать сокращение @$characters{simpsons}
здесь, но если я сделаю my $simpsons = $characters{simpsons}
, то я могу перебрать @$simpsons
.