Sometimes a file is too big to handle that way, though that's increasingly rare with modern computers. But if so, you could always use a program (such as tac) that will reverse the file for you, and then you can process the file in order in your code.

For one-off jobs, that's the way I'd go. But if you always need to process the files in reverse, I'd use the File::Backwards module that stevieb suggested.