I've done a bit of work with this.
. The basic idea is:
$HTTP::Request::Common::DYNAMIC_FILE_UPLOAD = 1;
my $req = make_http_request();
my $gen = $req->content();
die unless ref($gen) eq "CODE";
my $chunk = &$gen();
print "." x (length($chunk)/1024) if defined $chunk;
my $res = $ua->request($req);
This snippet will spit out a period for, more or less, each kilobyte uploaded. That's the theory. I've found that this isn't entirely reliable for every LWP implementation I've tried (not many, either).