@$list[0]
- это сокращение от @{ $list }[0]
, но вы хотите @{ $list[0] }
(или $list[0]->@*
).
@array[1,2,3]
- это фрагмент массива, эквивалентный
( $array[1], $array[2], $array[3] )
Синтаксис для среза массива:
@NAME[LIST] # Named array
@BLOCK[LIST] # A block returning a reference.
EXPR->@[LIST] # An expression returning a reference. Perl 5.24+
Например,
@array[1,2,3]
@{ $ref }[1,2,3]
$ref->@[1,2,3]
Когда блок содержит только простой скаляр ($NAME
или $BLOCK
), curlies блока можно опустить.
Например,
@{ $ref }[1,2,3]
можно записать как
@$ref[1,2,3]
Это то, что вы имели, но не хотели. Вы хотели элементы массива.
@NAME # Named array
@BLOCK # A block returning a reference.
EXPR->@* # An expression returning a reference. Perl 5.24+
Например,
@array
@{ $ref }
$ref->@*
Или, в вашем случае,
@{ $list[0] }
$list[0]->@*
Как и в случае с фрагментом массива, curlies блока могут быть опущены, когда блок содержит только простой скаляр. Но это не то, что у вас есть.
См. Perl Разыменование синтаксиса .