Давайте рассмотрим его по частям.
$s3
- это ваш объект S3.$s3->buckets
вызывает метод buckets
для этого объекта, и мы сохраняем результаты в $response
.Как говорят в документах, результаты являются хэш-ссылкой;ссылка - это скаляр, который указывает на другое значение.Если вы знакомы с указателями, идея та же самая.
Если бы у нас был простой хэш %response
, мы могли бы получить ключ buckets
в хэше, сказав $response{buckets}
.Поскольку у нас есть хэш ссылка , нам нужно использовать оператор разыменования (->
), чтобы получить ключ, чтобы он стал $response->{buckets}
.
Но мы еще не закончилиеще.$response->{buckets}
сама по себе ссылка, в данном случае ссылка на массив.Здесь мы видим другую форму разыменования.Мы могли бы, если бы мы хотели получить только один элемент в указанном массиве, скажем, например, $response->{buckets}[0]
.Но нам нужен весь список, поэтому мы используем оператор @
для разыменования всего массива.Так как наша ссылка на массив содержится в сложной структуре, мы используем curlies, чтобы содержать выражение, которое имеет ссылку.Так что @{ $response->{buckets} }
получает нам массив.
Это делает многое в одном выражении.
Подробнее о ссылках, которые могут быть одним из самых сложных предметов для изучения в Perl, см. Следующее:
- perlreftut - Учебное пособие по Perl
- perldsc - Поваренная книга структур данных Perl
- perllol - Все о массивах массивов
- perlref - Theглавная справочная документация по Perl