in reply to a quick stab at a public links page

I took a closer look at your script and you don't need CGI::Vars at all. You may want to read the documentation on CGI.pm. Your missing a lot of oppurtunities. Here are few corrections that may have you up and going quickly.

On this line we're creating %params.
my (%params) = $query->Vars;

CGI.pm has a function for this: param. To access any parameter, just call param('any'). To use it as a function we need to change use CGI; to use CGI qw/param/;

Now that we can access param directly, let's make a few changes.

my ($command) = $params{'command'}; touch() if ($command eq "touch"); addlink() if ($command eq "add");
becomes:
touch() if param('command') eq 'touch'; addlink() if param('command') eq 'add';
---------
errorpage("You must fill in both fields!") if (($params{'name'} eq "") || ($params{'url'} eq ""));
becomes:
errorpage('You must fill in both fields!') if param('name') eq '' || param('url') eq '';
---------
print FILE $params{'name'}." ".$params{'url'}."\n";becomes: print FILE param('name'), ' ', param('url'), "\n";
HTH,
Charles K. Clarkson