Oh, but something is being dereferenced. An array of hashes is actually an array of hash references, and so each element fed into your map is a scalar hash reference. You are probably confused because you can say $pages[0]{id}, which contains an implicit arrow operator (i.e. is equivalent to $pages[0]->{id}). See Using References for some details.
Comment on Re: Not understanding the arrow operator