Hello, thank you very much for your great comments and valued suggestions. I am deeply sorry for not being clear enough on my first attempt. My problem was only to learn why the values I select from my form array are not making it into the text file as they should? The last choice I select is the only value being added to the list at this time.
(In the past, I had real name values written in my html form. Passing/controlling these type of values has been so simple.) The below example uses an array made directly from opening a given dir. This confuses me deeply and I have tried so very hard to find the error for weeks...
I have again polished things up a bit and followed your advice.
Sincerely, I don't yet fully understand how to write all the different methods using perl, (I do promise to study them for the benifit they will bring me)if I may request the example or correction to follow my current coding style.
Hope I'm not being to forward, Thank you again in advance for your time and insight.
Jim

Really, seriously, use CGI instead of your hand-rolled procedure. It's been battle-tested, and is amazingly convenient to use; it handles all the URL-encoding and so forth, and deals with (inter alia) URLS that read like /script.pl?foo=bar&amp;baz=bletch, which would mess yours up. CGI will cut way down on the number of lines of code in your script, and make debugging easier. In fact, it's your hand-rolled procedure that appears to be the culprit. What you have in your HTML form, as generated by the script, is something like this:

and when your hand-rolled procedure runs, here's what happens: it encounters the first one, and sets $FORM{'choice'} to foo.txt; when it enounters the second one, it sets $FORM{'choice'} to bar.txt. So that's why you only see the last value.

Here's how you'd parse the form with CGI: at the top of your script, put use CGI qw(param); and to get the list of selected files, you'd simply add the one line @files = param('choice');. End of story.

I also want to lean hard on use strict. It may seem like it will make things more painful, but it will force you to think about which subroutines need access to which data. It will make your code so much more maintainable. And, as a final suggestion, I'd suggest you look into using CGI ;)