But for some reason the script keeps popping a 500 error and there is nothing in my log files.
When running a script as a CGI script, it needs to output headers before anything else. Please see one of the alternatives to CGI.pm for which modules you could use. As one example, you might try:
use CGI::Simple;
my $q = CGI::Simple->new;
print $q->header();
In general, Use strict and warnings, and see also Basic debugging checklist, CGI Help Guide, and Troubleshooting Perl CGI scripts. Note you can always run your CGI script from the command line first to see any errors.
Update: Also, note print ("--", @row), "\n\n"; is not doing what you think, and warnings would have given you some hints about that: it's being interpreted as ( print("--", @row), "\n\n" ); - that is, print is only getting the arguments "--", @row, but not "\n\n". You need to write print "--", @row, "\n\n"; or print(("--", @row), "\n\n"); instead. And it's best not to use $a and $b as variable names as those get special treatment by sort.