Okay, I figured it out. It was the permissions, even though anyone could read the file when I ran 'ls -ltr'.
Is there something different about reading a file via file handle, as opposed to Tie::File? This is why I tried it the conventional way -- to see if I had permission to read the file.