2012-02-09 116 views
1

目前,我有一些代码,返回一个网站头内容回:多个字符串解析循环

#!/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"; 

我想什么做的,是能够从一个文件打开(文件读取,'< ',转移);然后将文件中的每个IP传递到头文件检索循环中,从而使我无需手动执行一个循环。

我的意思是在每一行都有一个包含(示例ips):1.1.1.1 2.2.2.2的文件,然后通过get头函数解析所有这些文件。

+0

你真的应该添加'使用警告'并整理当你再次运行你的代码时你会得到的所有警告。做像'@header [$ i] = $ _'这样的事情可能不是你想做的事情。 – CanSpice 2012-02-09 21:51:24

+0

只需指出,使用'||'创建$ socket有一个细微的错误,如@Ilmari Karonen所述http://stackoverflow.com/a/9221648/1190901 – tangent 2012-02-10 02:27:14

回答

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; 
    ... 
}