in reply to determine file type from data read from filehandle

XLSX files are in fact zip files, so you can try to unzip them to test whether they are XLSX or not. The older XLS files are memory dumps of MSExcel, but they should still follow a pattern. Maybe try MIME::Detect or one of the other libraries mentioned in its SEE ALSO section.
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,