How do I download a file from the user's machine? How do I open a file on another machine?

In the context of an HTML form, you can use what's known as multipart/form-data encoding. The CGI.pm module (available from CPAN) supports this in the start_multipart_form method, which isn't the same as the startform method.