Actually, @{$data}[0] and $data->[0] perform slightly different tasks. The former creates an array containing one element (hence the @ at the start), whilst the latter creates a scalar (hence the $ at the start).
It becomes apparent with more complex data structures, such
as AoAoAoAoAoAoA's or HoHoHoHoHoHoHoH's, or any mutant
variation thereof.
$data->[0]->[1]->[3]->[1]->[41]->[6]
over
${${${${${${$data}[0]}[1]}[3]}[1]}[41]}[6]
Unless you're really good at counting brackets, I'd stick
with the C-style dereferencing via '->'