This is kind of kludgey, but here's a way to output arbitrary text for each hash mark Net::FTP prints.
#!/usr/bin/perl
use strict;
use Net::FTP;
my $BYTES_PER_HASH = 1024;
# Fork a child process for Net::FTP
# and capture its output one char at
# a time
if (open(FTP, "-|"))
{
# parent
my $count = 1;
while (getc(FTP))
{
print $BYTES_PER_HASH * $count, " bytes received\n";
$count++;
}
print "Done\n";
}
else
{
# child
my $ftp = Net::FTP->new("ftp.microsoft.com", Debug => 0);
$ftp->login("anonymous","-anonymous\@");
$ftp->cwd("MISC");
$ftp->hash(\*STDOUT, $BYTES_PER_HASH);
$ftp->get("NBFCP.TXT");
$ftp->quit;
}
If you know the size of the file (or use Net::FTP to get it before starting the download), you could use this to output a progress meter. If you don't want to output plain text, you could output javascript that updates a graphic meter instead.
-Matt