By the way, in your post here, I don't understand the point of the two $self->{file} = shift; lines, especially the second one? Why change the filename while reading the file?
Looking at it, you're right, but I think the second one, if you mean the one further down the page, is the one that needs to exist and the first one is the one which doesn't.
I instantiate the module without naming the file, then call get_lines with the file name. It doesn't need to be passed as an argument to get_filehandle because it's already there.
My brain was having a very bad day as you can probably tell.