2012-02-09 2 views
1

я в настоящее время есть некоторый код, который возвращает сайты заголовок содержание назад:Multiple строка синтаксического анализа в цикле

#!/usr/bin/perl 

use strict; 
require IO::Socket; 

my @header; 
my $host = shift; 

my $socket = new IO::Socket::INET(
    PeerAddr => $host, 
    PeerPort => 80, 
    Proto => 'tcp') || die "Could not Connect $!\n"; 

print "Connected.\n"; 
print "Getting Header\n"; 

print $socket "GET/HTTP/1.0\n\n"; 
my $i = 0; 
while (<$socket>) { 
    @header[$i] = $_; 
    $i++; 
} 

$i = 0; 
print "--------------------------------------\n"; 
while ($i <= 8) { 
    print "@header[$i++]"; 
} 

print "-------------------------------------\n"; 
print "Finished $host\n"; 

То, что я хотел бы сделать, это, чтобы иметь возможность читать из файла с открытым (FILE, "< ', сдвиг); а затем каждый IP в файле, чтобы перейти в цикл получения заголовка, что избавляет меня от ручного выполнения по одному.

Что я имею в виду, это иметь файл, содержащий (пример ips): 1.1.1.1 2.2.2.2 на каждой строке, а затем синтаксический анализ всех из них через функцию заголовка get.

+0

Вы должны действительно добавить 'использовать предупреждения и убирать все предупреждения, которые вы получите, когда вы снова запустите свой код. Выполнение таких вещей, как '@header [$ i] = $ _', вероятно, не то, что вы хотите сделать. – CanSpice

+0

Просто указать, что существует тонкая ошибка с созданием $ socket с использованием '||', как описано @Ilmari Karonen здесь http://stackoverflow.com/a/9221648/1190901 – tangent

ответ

1

Заменить

my @header; 
my $host = shift; 
... 

с

while (<>) { 
    chomp(my $host = $_); 
    my @header; 
    ... 
} 
1

Вы бы просто открыть файл, прочитать содержимое в виде списка, а затем итерацию по списку:

open my $fh, '<', $file or die "$!"; 
my @ips = <$fh>; 
close $fh; 
foreach my $ip (@ips) { 
    chomp $ip; 
    ... 
} 
Смежные вопросы