sub get_a_file { # don't buffer the prints to make the status update $| = 1; #from lwpcook use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $URL = 'http://zentara.net/zentara1.avi'; my $filename = substr( $URL, rindex( $URL, "/" ) + 1 ); #print "$filename\n"; open( IN, ">$filename" ) or die $!; my $expected_length; my $bytes_received = 0; my $res = $ua->request( HTTP::Request->new( GET => $URL ), sub { my ( $chunk, $res ) = @_; $bytes_received += length($chunk); unless ( defined $expected_length ) { $expected_length = $res->content_length || 0; } if ($expected_length) { $progress = 100 * $bytes_received / $expected_length; printf "%d%% - ", 100 * $bytes_received / $expected_length; } print "$bytes_received bytes received\n"; # XXX Should really do something with the chunk itself print IN $chunk; } ); print $res->status_line, "\n"; close IN; }