Have a look at mirror; I haven't used it for a while, but it always did what was advertised.
That failing, LWP (or LWP::Simple) makes it pretty easy to roll your own. If you have a relatively small/static list of files:
use LWP::Simple;
my $remote = 'ftp://ftp.example.com/path';
# All filenames relative to $remote
my @files = qw(
file1.tar.gz file2.tar.gz file3.zip
subdir/another.tar.gz
long/path/test.txt
);
mirror("$remote/$_", "$local/$_") for @files;
If you need to generate listings of files recursively based on listings from the server, you will probably want to have a look at Net::FTP::Recursive's rls method.
If you just need something to work with a minimum of fuss, and don't actually need a Perl solution, wget will do the trick (Win32):
wget --mirror ftp://ftp.example.com/path
|