Regardless of how pointers, buffering and whatnot are handled for DATA, there's two obvious considerations to make here:
When iterating over an array, perl's simply walking down a list of scalar-structures already assembled and ready to be used. When reading the filehandle, this data has to be taken from the input buffers and put into an sv before it can be dealt with. There's one chunk of overhead.
The other chunk of overhead is the fact that to get to the data in DATA, perl has to pass all of this data through all of its I/O code -- reading, keeping track of filehandle meta-information, manipulating buffers. It's cheap (with buffering) but it's not that cheap.