Perl:带有curl输出的格式表

时间:2015-02-16 19:27:42

标签: perl formatting

我有类似下面的卷曲代码:

foreach my $value ('1', ..., '5') {
    my $count = 1;
    print "\nValue: $value\n\t";
    my $start = `curl -m 10 -s "http://SITE/?value=$value" -c cookie.txt`;
    my $end1 = `curl -m 10 -s "http://SITE2" -b cookie.txt`;
    if($end1 ne "") {print ". "}; else print "$count ";
    my $end2 = `curl -m 10 -s "http://SITE3" -b cookie.txt`;
    if($end2 ne "") {print ". "}; else print "$count ";
    my $end3 = `curl -m 10 -s "http://SITE4" -b cookie.txt`;
    if($end3 ne "") {print ". "}; else print "$count ";
    $count++;
}

因此,从值15,它访问网站并将cookie值存储在cookie.txt中。然后,它使用cookie.txt中存储的cookie访问3个不同的网站。一旦访问这些网站,它就会打印当前计数(如果请求在10秒后超时,则打印.。)

此示例输出为:

Value: 1
    1 1 1 2 . 2 3 3 3 4 . . . 5 5
Value: 2
    . . 1 2 2 2 3 3 3 4 . 4 5 5 .

是否可以将输出格式化为:

Value: 1
    Site2: 1 2 3 4 .
    Site3: 1 . 3 . 5
    Site4: 1 2 3 . 5
Value: 2
    Site2: . 2 3 4 5
    Site3: . 2 3 . 5
    Site4: 1 2 3 4 .

我遇到的问题是,在循环中,我只想在每个循环中运行$start一次。按照我希望它格式化的方式,每个站点必须运行一次(3次)。

2 个答案:

答案 0 :(得分:1)

您的要求有点令人困惑,但这会为您提供所需的输出:

my @sites = qw( SITE2 SITE3 SITE4 );
foreach my $value ('1'..'5') {
    print "\nValue: $value\n";
    my $start = `curl -m 10 -s "http://SITE/?value=$value" -c cookie.txt`;        
    for my $site (@sites) { 
       print "\t$site ";
       for (1..5) { # assuming you want to fetch each url 5x
          my $end = `curl -m 10 -s "http://$site" -b cookie.txt`;
          print $end eq '' ? '. ' : $_.' '; 
       }
       print "\n";
    }
}

答案 1 :(得分:0)

请开启use strict;use warnings。 如果你这样做,你会发现:

foreach my $value ('1', ..., '5') {
    print $value,"\n";
}

语法错误。这不是一个好的开始。也许你想要:

foreach my $value ( 1..5) {
    print $value,"\n";
}

同样地,您需要一个永远不会更改的$count变量,因为您在循环中将其置于本地(通过my),并在每次迭代时将其设置为1。然后在它离开范围之前,在最后增加它。