PROBLEM FOUND. I'm leaving the question here, though, in case others run into the same problem I ran into.
It looks like I encountered a bug or a weird feature in WinZip 11. When I double click the test2.zip file to see its contents, WinZip tells me the path to the data file is "allcapsname" in lower case, but when WinZip extracts the archive (from a right-click Extract to here menu), it actually creates the "ALLCAPSNAME" directory properly. I was complaining about a problem I thought I was having with Archive::Zip and it was a WinZip problem the whole time. Thanks to all who helped figure out what was wrong.
Turns out that to get the path to show up in WinZip file while using Archive::Tar, you need this line in your code to force Archive::Tar to deviate from strict POSIX compliance: $Archive::Tar::DO_NOT_USE_PREFIX = 1;
ORIGINAL QUESTION: I've found a handful of various Perl modules so far that appear to be capable of creating ZIP or GZIP or TAR or TGZ archive files from within my Perl scripts, but I haven't actually had complete success from any of them. Why is this so hard? Is it because I'm on a Windows machine? (I've wasted about 4 hours on this seemingly simple task so far and am really getting frustrated.)
When I tried Archive::Tar I had success creating the archive file, but I was not able to get the paths to any of my files included in the tarball for some reason or another. I tried a bunch of different things in my code and my tarball always showed the files in there with empty paths. (I'm looking at my tarballs using WinZip.)
When I tried Archive::Zip I had more success and I got the actual directory path to my files included in the archive file. The only problem was that my path to my files was somewhere along the way changed from upper case to lower case. Why did it change the case of my directory? I want the actual directory name to remain exactly as it was.
I tried a few other modules without any success. I can't even get the sample code from Archive::Builder to even compile.
ORIGINAL QUESTION ADDENDUM:
I have finally been able to create a minimal executable script that clearly demonstrates my 2 problems that I described above regarding Archive::Zip and Archive::Tar.
use strict;
use warnings;
use Archive::Zip;
use Archive::Tar;
print "Starting...\n";
# Archive::Zip Synopsis (relative path to directory)
my $zip1 = Archive::Zip->new();
$zip1->addFile( 'MyArchiveFiles/file1.txt' )
or die 'unable to add file to archive';
$zip1->writeToFileNamed('test1.zip');
# Archive::Zip Synopsis (with ALL CAPS DIRECTORY NAME)
my $zip2 = Archive::Zip->new();
$zip2->addFile( 'ALLCAPSNAME/file1.txt' )
or die 'unable to add file to archive';
$zip2->writeToFileNamed('test2.zip');
# Archive::Tar Synopsis (relative path to directory)
my $tar3 = Archive::Tar->new;
$tar3->add_files( 'MyArchiveFiles/file1.txt' )
or die 'unable to add file to archive';
$tar3->write('test3.tar');
print "Finished successfully!";
This script creates 3 archives. The first archive contains the data file with the appropriate path of "MyArchiveFiles\". My problem occurs when my directory name is all caps. The second archive contains the data file, but the path in the archive file is not "ALLCAPSNAME\" as expected ... it is "allcapsname\". This is a problem for me. Why did it change the case of my path and how can I force it to leave it alone?
The third archive contains the data file but it contains an empty path for that file. This is a problem for me. I need the path to be in the archive so that when I unpack the archive the files are extracted into the appropriate directory structure.