Muchas gracias a la respuesta de Peter Kovacs para mí que conduce a la respuesta correcta. Resultó ser un poco más elaborado de lo que esperaba, así que decidí (horror) responder mi propia pregunta.
Como Peter mostró, que puede establecer una devolución de llamada de esta manera:
$m->get($u, ":content_cb" => \&callback);
Pero ahora no puedo guardar el contenido mediante el: content_file valor, porque sólo se puede elegir uno de los dos. La función de devolución de llamada pasa los datos, y terminé escribiéndolo en un archivo.
También recibo un objeto de respuesta que contiene el tamaño total del contenido como señaló friedo. Así que al mantener un total acumulado de contenido recibido hasta ahora y dividiéndolo por el contenido total, puedo averiguar qué porcentaje del contenido se ha descargado. Aquí está la función de devolución de llamada completa:
open (VID,">$i.flv") or die "$!";
$total = 0;
sub callback
{
my($data, $response, $proto) = @_;
print VID "$data"; # write data to file
$total+= length($data);
$size = $response->header('Content-Length');
print floor(($total/$size)*100),"% downloaded\n"; # print percent downloaded
}
Espero que ayude a alguien.
Esto ayuda. Gracias :) – Mike
Esto funciona para mí. Pude usar el identificador de archivo como archivo temporal solo para estadísticas. Uso '\ r' para retroceder y mantener el terminal en una línea a medida que el porcentaje descargado aumenta y todo lo que hice después de' $ m-> get ($ u, ": content_cb" => \ & callback); 'es llamada' $ m-> save_content ($ newLocation); 'Esto no descarga el contenido dos veces. Probado en un archivo de 250M. – DataHerder