@files y
%files son dos variables distintas. Una es un array y la otra, un hash.
Otra cosa es el
sigil (el signo que hay delante) que indica el tipo de dato que queremos obtener de ellas.
Es decir, para el caso de
@files: si ponemos
$files[2] estamos obteniendo un solo valor -el
sigil $ indica un valor escalar-, en concreto, el tercer elemento de
@files. Pero si ponemos
@files[3,7] queremos obtener una lista (
@) de dos valores: el cuarto y el octavo elemento de
@files.
En el caso de los hash es algo parecido:
$files{image1} es un elemento (
$) de
%files: el que corresponde a la clave 'image1'. Y
@files{'image1','image2'} es una lista (
@) de dos valores: los que corresponden a las claves 'image1' e 'image2' de
%files.
Más información en
perldata.