Почему perv autovivification не работает для ->@*, но ->@[0] работает?

Я могу получить значения путем нарезки:

($x, $y, $z) =  $hash->{ key }->@[0,1,2]

Почему я не могу написать?

($x, $y, $z) =  $hash->{ key }->@*

Для второго выражения в случаях, когда key не определено в хэше, я получаю ошибку:

Не могу использовать неопределенное значение в качестве ссылки на массив в...

1 ответ

Решение

Срез получает lvalues ​​(записываемые скаляры) для каждого указанного индекса; разыменование массива контекста списка не имеет значения l. И общее правило заключается в том, что автовивификация применяется только к lvalues.

Например ->@* будет автовивифицировать в этом случае:

push $hash->{ key }->@*, 1;
Другие вопросы по тегам