As far as making an array of filehandles, the answer, using "bareword filehandles" like you have is no, or at least not an easy way. OTOH, using IO::File allows you to open things and create objects, which are much easier to deal with. (Technicaly, the two are not as disseperate as they first appear -- there's lots of interesting things that go on under the covers. Don't worry about it for now.)
As to the open files limit, I feel decently secure in saying that it's not perl's fault, but OSX's. Googling for "too many open files" OSX may (or may not) help.