Molte grazie a risposta Peter Kovacs' per me che porta alla risposta corretta. Si è rivelato un po 'più elaborato di quanto mi aspettassi, quindi ho deciso di rispondere (orrore) alla mia domanda.
Come Peter ha mostrato, posso impostare una richiamata in questo modo:
$m->get($u, ":content_cb" => \&callback);
Ma ora non può salvare il contenuto utilizzando il: valore di content_file, perché posso scegliere solo uno dei due. La funzione di callback ha passato i dati e ho finito per scriverli su un file.
Ho anche ricevuto un oggetto risposta che contiene la dimensione totale del contenuto come indicato da friedo. Quindi, mantenendo un totale parziale di contenuti ricevuti finora e dividendolo per il contenuto totale, posso scoprire quale percentuale del contenuto è stata scaricata. Ecco la funzione di callback 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
}
Spero che questo aiuti qualcuno.
fonte
2009-12-21 05:59:48
Questo aiuta. Grazie :) – Mike
Questo funziona per me. Sono stato in grado di utilizzare il file handle come file temporaneo solo per le statistiche. Io uso '\ r' per tornare indietro e mantenere il terminale su una riga mentre la percentuale scaricata aumenta e tutto ciò che ho fatto dopo' $ m-> get ($ u, ": content_cb" => \ & callback); 'is call' $ m-> save_content ($ newLocation); 'Questo non scarica il contenuto due volte. Testato su un file 250M. – DataHerder