Does that actually work? I have a hard time believing the original poster has files called, literally, '$line'.
To kidd, the reason your program doesn't work is because there's a bug. You need to look in your error logs, run the script from the command line, or use CGI::Carp to display the error message to the browser. Without the information Perl's perfectly willing to give you, it's tremendously difficult to do anything other than guessing what and where the error is.
Your CGI script is probably running as a web user with insufficient privileges to read arbitrary files on this system. Contact your system administrator for help in making these files readable to your CGI script. If you have access to these files, consider changing permissions of the files so that they are world-readable. [chmod] 0644 $filename should be sufficient.