I'm sorry, but... what? The files are user-input, so the $file=<> has worked fine for me in the past.
Sorry, but I have no clue what else you said besides that. :( What does shift @ARGV do? What is it calling from? what does the $! in the die function do?