Un grand merci à Peter Kovacs réponse pour moi conduisant à la bonne réponse. Il s'est avéré être un peu plus complexe que ce à quoi je m'attendais, alors j'ai décidé (horreur) de répondre à ma propre question.
Comme Peter a montré, je peux définir un rappel comme ceci:
$m->get($u, ":content_cb" => \&callback);
Mais maintenant, je ne peux pas enregistrer le contenu en utilisant la: valeur content_file, parce que je ne peux choisir l'un des deux. La fonction de rappel reçoit les données, et j'ai fini par écrire cela dans un fichier.
Je reçois également un objet de réponse qui contient la taille totale du contenu comme indiqué friedo. Donc, en gardant un total cumulatif du contenu reçu jusqu'ici et en le divisant par le contenu total, je peux trouver quel pourcentage du contenu a été téléchargé. Voici la fonction de rappel complet:
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
}
J'espère que cela aide quelqu'un.
Cela aide. Thanks :) – Mike
Cela fonctionne pour moi. J'ai été en mesure d'utiliser le handle de fichier en tant que fichier temporaire juste pour les statistiques. J'utilise '\ r' pour revenir en arrière et garder le terminal à une ligne quand le pourcentage téléchargé monte et tout ce que j'ai fait après' $ m-> get ($ u, ": content_cb" => \ & callback); 'est appel' $ m-> save_content ($ newLocation); 'Ceci ne télécharge pas le contenu deux fois. Testé sur un fichier 250M. – DataHerder