Большое спасибо ответу Питера Ковача за то, что он привел меня к правильному ответу. Это оказалось немного сложнее, чем я ожидал, поэтому я решил (ужас) ответить на свой вопрос.
Как показал Питер, я могу установить обратный вызов следующим образом:
$m->get($u, ":content_cb" => \&callback);
Но теперь я не могу сохранить контент, используя значение: content_file, потому что я могу выбрать только один из двух. Функция обратного вызова получает данные, и вместо этого я записал их в файл.
Я также получаю объект ответа, который содержит общий размер содержимого, как указано в Friedo. Таким образом, сохраняя общее количество полученного контента и деля его на общее содержание, я могу узнать, какой процент контента был загружен. Вот полная функция обратного вызова:
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
}
Надеюсь, это кому-нибудь поможет.