0

このプログラムは、@values 配列の各値について Web から数値を取得します。これらの値を次のような表に出力したいと考えています。

       il9  il8 il7
 2012  v1    b1
 2011  v2    b2
 2010  v3    b3
   .
   .
 2000  v12   b12

ここで、v1 .. v12 は @values などの最初の変数の値です。これが私のプログラムです。構造化を手伝ってください。perl でプログラムの最初の行に戻ることができるエスケープ文字はありますか?

  #!/usr/bin/perl -w
  use strict;
  use LWP::UserAgent;
  use URI;
  my $browser = LWP::UserAgent->new;
  $browser->timeout(10);
  $browser->env_proxy;

  open(OUT, ">out");
  my $i = 2013;
  while ($i-- > 2000){print OUT "$i\n"}
  my $a = 2013 ;
  my $base = 'http://webtools.mf.uni-lj.si/public/summarisenumbers.php';
  my @values = ('il9', 'il8', 'il6' );
  foreach my $value (@values) {
print OUT "$value \n"
    while ($a-- > 2000){
                my $b = $a + 1;
                my $c = $b + 1; 
                my $query = '?query=('.$value.')'.$a.'[dp] NOT           '.$b.'[dp] NOT '.$c.'[dp]';
                my $add = $base.$query;
                #my $url = URI->new($add);  
                #my $response = $browser->get($url); 
                #if($response->is_success) {print OUT $response->decoded_content;}
                #else {die $response->status_line};
                print OUT "$query\n";
                } $a = 2013; print OUT
                        }

   close(OUT);
4

1 に答える 1

0

フォーマット/インデントと変数の命名にもっと注意を払ってください - それはあなたを大いに助けます.

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;

my $base_url  = 'http://webtools.mf.uni-lj.si/public/summarisenumbers.php';
my @values    = ( 'il9', 'il8', 'il6' );
my $stat_data = {};

my $browser = LWP::UserAgent->new;
$browser->timeout(10);
$browser->env_proxy;

for my $value ( @values ) {

    for my $year ( 2010 .. 2013 ) {

        my $query = '?query=(' . $value . ')' . $year .'[dp] NOT           ' . ($year+1) . '[dp] NOT ' . ($year+2) .'[dp]';
        my $url   = "$base_url$query";

        my $response = $browser->get( $url );

        if( $response->is_success ) {
            ## store the fetched content in a hash structure
            $stat_data->{$year}->{$value} = $response->decoded_content;
        }
        else {
            die $response->status_line;
        }
    }
}

## print the header
print "\t", join( "\t", @values ), "\n";

## print the data by the years in reverse order
for my $year ( reverse sort keys %{$stat_data} ) {

    print $year;

    for my $value ( @values ) {
        print "\t", $stat_data->{$year}->{$value};
    }

    print "\n";
}
于 2013-10-07T17:38:50.693 に答える