[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