Просто получить размер очень просто:
use LWP::Simple;
my $url='http://www.superuser.com/favicon.ico';
my ($type, $size) = head($url) or die "ERROR $url: $!";
print "$url: type: $type, size: $size$/";
,
Однако для реального индикатора прогресса вы должны зарегистрировать обратный вызов, например:
use LWP::UserAgent;
my $url='http://superuser.com/questions/200468/how-to-get-file-size-before-downloading-the-file-lwpuseragent?rq=1';#'http://www.superuser.com/favicon.ico';
my $ttlDown = 0;
my $resp = LWP::UserAgent->new()->get($url, ':content_cb' => sub {
my ($data, $response) = @_;
my $size = $response->content_length;
$ttlDown += length $data;
printf("%7.1f KB of %7.1f (%5.1f%%)$/",
$ttlDown / 1024.0, $size / 1024.0, $ttlDown * 100.0 / $size
);
##### TODO: append $data to file #####
});
print "$/-----$/".$resp->as_string();
Обратите внимание на строку ##### TODO
: вы можете записать полученные байты на диск.