Usage of LWP module
LWP モジュールの使用

LWP を利用したプログラム

LWP の導入後, 以下のプログラムを ~/pl/gpi.pl とし て作成せよ.

#!/usr/bin/perl -w

use strict;
use LWP::Simple;

my $uri="http://sirius.yamamotolab.jt.u-tokai.ac.jp/~hiroshi/report07.html";
my $contents = get $uri;
if (defined $contents){
    print $contents;
} else {
    print "Cannot get $uri\n";
}

上記プログラムは "http://sirius.yamamotolab.jt.u-tokai.ac.jp/~hiroshi/report07.html" という URI で示された web 上のドキュメントを $contents いう文字列変数 へ格納し,出力している.プログラムを実行し, 改行も含めてファイル全体が一つの文字列変数へ格納されることを確認せよ.

練習 11.1 LWPを使ったソースファイルの集計(コマンドライン版)

ゼミ所属学生全員の report07.html にアクセスし,試行回数と円内に入った試 行の数の総数を求めるプログラムを作成する. 今年度のゼミ生全員のホストの IP アドレスとログイン名は 今年度の学生のファイルのURLへのリンク を参照すること. 以下にプログラム例を 挙げる.~/pl/gpidata.pl として作成せよ. 文字列マッチに /s オプションを与えていることに注意せよ. 対象とする文字列に改行文字が含まれているためである.

プログラム gpidata.pl

#!/usr/bin/perl -w

use strict;
use LWP::Simple;
my $gtrial;
my $gcircle;
my $gpi;
my @uri=("http://sirius.yamamotolab.jt.u-tokai.ac.jp/~hiroshi/report07.html",
"http://学生1のIPアドレス/~学生1のログイン名/report07.html",
"http://学生2のIPアドレス/~学生2のログイン名/report07.html",
"http://学生3のIPアドレス/~学生3のログイン名/report07.html",
(全学生分続く)
);
foreach my $data (@uri){
    $_ = get $data;
    if (defined){
        if (/trial:<\/dt>\s*<dd>\s*(\d+).*circle:<\/dt>\s*<dd>\s*(\d+)/s){
            $gtrial+=$1;
            $gcircle+=$2;
            print "$data matched\n";
        }
    } else {
        print "Cannot get $data\n";
    }
}
$gpi = 4*$gcircle/$gtrial;
print "gtrial:$gtrial\n";
print "circle:$gcircle\n";
print "pi:$gpi\n";

練習 11.2 LWPを使ったソースファイルの集計(CGI版)

gtotal0.cgi に gpidata.pl を組込むことで,最終目標である 各自が計算したπの値を集計する CGI を作ることができる. 自分のホスト上に ~/public_html/cgi-bin/gtotal.cgi というファイル名で作成せよ.

2019年度の受講生についてのリンクは以下の通り.

課題 8

課題「集計CGI」 を読んで課題 8 を提出しなさい.


Updated in December 17, 2018, index, Yamamoto Hiroshi