[Moscow.pm] Net::FTP, FTP Transfer Status, $ftp->hash , фильтрация STDOUT - как получить число вместо решёток?

Dmitry Arsentiev dmarsentev на gmail.com
Вт Янв 11 06:21:28 PST 2011


Здравствуйте.

Может кто-нибудь подсказать, каким образом, используя модуль Net::FTP,
из transfer status-а в виде строки с решётками получить количество
эттих решёток.
ОС WinXP SP3.

Пользуясь вот этим советом
http://www.perlmonks.org/index.pl?node_id=242130

запускаю аналог этого кода
        m $BYTES_PER_HASH  = 1024;
        my $ftp = Net::FTP->new("ftp.microsoft.com", Debug => 0);
        $ftp->login("anonymous","-anonymous\@");
        $ftp->cwd("MISC");
        $ftp->hash(\*STDOUT, $BYTES_PER_HASH);
        $ftp->get("NBFCP.TXT");
        $ftp->quit;

и получаю на экране много решёток,
которые возвращает метод hash.

Вопрос: как отфильтровать STDOUT, чтобы вместо строки из решёток на
экране получалось,
например, число, равное количеству этих решёток?

Вообще, если у кого-то есть опыт визуализации _не_ _решётками_
transfer status-а
при использовании Net::FTP, поделитесь пожалуйста.

Спасибо.

PS
Полный рецепт http://www.perlmonks.org/index.pl?node_id=242130
- см.  код ниже - не работает, ругается на -| , говорит, что нет такой
переменной "-".

#!/usr/bin/perl

use strict;
use Net::FTP;

my $BYTES_PER_HASH = 1024;

# Fork a child process for Net::FTP
# and capture its output one char at
# a time
if (open(FTP, "-|"))
{
        # parent
        my $count = 1;
        while (getc(FTP))
        {
                print $BYTES_PER_HASH * $count, " bytes received\n";
                $count++;
        }
        print "Done\n";
}
else
{
        # child
        my $ftp = Net::FTP->new("ftp.microsoft.com", Debug => 0);
        $ftp->login("anonymous","-anonymous\@");
        $ftp->cwd("MISC");
        $ftp->hash(\*STDOUT, $BYTES_PER_HASH);
        $ftp->get("NBFCP.TXT");
        $ftp->quit;
}


Подробная информация о списке рассылки Moscow-pm