блин проблема все продолжается!!! прога почемуто качает файлы с одним и тем же содержимым если я делаю вот так
| Код | foreach (@str) { chomp; gener($_); } |
а если я делаю :
| Код | gener('filename1'); gener('filename2'); gener('filename3'); gener('filename4');
|
Все отлично почему так???? Текст проги:
| Код | #!/usr/bin/perl use Socket;
my $lst_file='drweb32.lst';
gener($lst_file); #качаем лст-файл $/="\n";
#парсим лст-файл open(F,"<$lst_file") || die $!; open (FF,">parse$lst_file") || die $!; NEX: while (<F>) { next NEX if /\[\d+\]/; s/(.+)\,.*/$1/; s/^.?(.+)/$1/; s/<.+>(.+)/$1/; s/\|.+//; s/(.+)\\(.+\.\w+)/$2/; next NEX if /\*/g; print FF; } close FF; close F;
#Качаем файлы имена каторых содератся в лст-файле open (F,"<parse$lst_file"); @str = <F>; close F; foreach (@str) { chomp; gener($_); }
############ПРОЦЕДУРЫ ОТВЕЧАЮЩИЕ ЗА СКАЧИВАНИЕ АЙЛОВ######### sub gener { $fn=$_[0]; $file = '/free/windows/'.$fn; $host = 'updates.drweb.ru'; #'10.59.1.40'; $port = 80; $request="GET $file HTTP/1.0\nHOST: $host:$port\n"; $/=undef;
eval { $text = &http; }; close SOCK;
if ((!$@) and ($text=~/^HTTP\/[^ ]* (\d+)/) and ($1==200)) { $text=~/\r?\n\r?\n/s; $out = $'; }
open (FL, ">$fn"); binmode FL; print FL $out; close FL; print "$fn ok\n"; } #--------------------------------------------------------------------------------------------------------------------- sub http { return 'Error 1' if !($addr=gethostbyname($host)); return 'Error 2' if !(socket(SOCK,PF_INET,SOCK_STREAM,getprotobyname('tcp'))); return 'Error 3' if !(connect(SOCK,pack('S n a4 x8', PF_INET, 80, $addr))); select SOCK; $|=1; select STDOUT; print SOCK $request."\n"; my @text = <SOCK>; return join("", @text); } #############################################################
| |