トップ>Perl&CGI>基本編目次>INCMプラグインで覚えるPerl講座8

INCMプラグインで覚えるPerl講座

第8回 ページめくり処理と終了処理

今回はページめくり処理から最後までです。

ページめくり処理

44行目のwhile文から69行目の}までのループを抜けると 1ページ分を読みきったということです。

73行目

 last ATCL if $local;			# ローカルファイルなら抜ける

は、コメントの通りローカルでのインポートなら次のページが ないので、ATCLの記事取得ループを抜けて最後の処理に行きます。
last」はループ処理を終わりにする命令です。
next」なら今のループをそこで止めて次のループに入ります。

74行目

 last ATCL unless $param2;

$param2には&initで読み込んだ未読ポインタが入っています。 設定していない場合は何も入りません。 この文では「unless」で$param2が真でなかったらATCLを抜ける 処理をしています。 ようするに未読ポインタがなければ、次のページは読まないという ことになります。

76行目

 $atclmax=$atclcnt unless $atclmax;		# 最初のページの数がページ毎の最大値に

$atclmaxには1ページ内の最大記事数が入ります。 この文では$atclmaxが空なら51行目でカウントして$atclcntに格納した 1ページの記事数を代入します。

77行目

 last ATCL if($atclcnt != $atclmax);	# 最大値より少ないなら最終ページ(終了)

1ページ内の最大記事数より今回の記事数が少ない場合は、その掲示板の 最終ページであるという判断をして、ATCLを抜ける処理をしています。

79行目

 print "\nConnecting...";

これは巡回ウィンドウに接続中を示すメッセージを表示します。 が、STDOUTが抜けているので、CMTファイルに書き込んでしまってます。 記述ミスみたいですね。このプラグインを使ってる人は

 print STDOUT "\nConnecting...";

に直したほうがいいでしょう。

80行目

 $uri=~s/\?.*$//; $uri.="?i1=".($page*$atclmax);
$uri=~s/\?.*$//;

は、読み込むURLの?以降のCGIへの引数を削除しています。 「\?」はそのまま「?」を示し、「.*」は任意の文字が続き、 「$」それらを対象文字列の最後から調べます。 「bbs.cgi?id=123&page=2」なら「bbs.cgi」になります。

$uri.="?i1=".($page*$atclmax);

は、$uriに「?i1=」という文字列と「($page*$atclmax)」の結果を連結しています。 $pageにはここまでに読み込んだページ数が入っています。 それと1ページの最大記事数を掛けた数値が連結されることになります。 たとえば今が2ページ目で、最大記事数が10なら、 2×10で20という数値が連結され、結果として「?i1=20」というのが $uriに入っている文字にくっつきます。

$uri = 'bbs.cgi';

なら、「bbs.cgi?i1=20」が$uriの中身になります。

81行目

 if(&httpreq("")){  &gettitle; redo ATCL; }

&httpreqは設定されたアドレスに接続するサブルーチンでしたね。 今度は$uriにはページめくり用の引数が付いています。 なので、アクセスしたら次のページが読み込まれるはずです。

if(&httpreq(""))

としてるのは、サーバ混雑などで読み込まれない場合もあるので、 読み込まれた場合だけ次の記事取得処理に入るようにしています。 「&gettitle」は前に説明したようにタイトルタグからCMTヘッダ用の タイトルを取得をしています。 でもCMTファイルには書き出していません。 すでに書き出してあるので必要ないからです。 では、なぜこの処理をしてるのかというと、HTTPヘッダを読み飛ばすためだと考えられます。 HTTPヘッダには日付が入っていたりするので、記事と誤認識されては困るからです。

redo ATCL」はATCLループの先頭に戻るように指示しています。 「redo ラベル」で、そのラベルの所まで戻ってブロック内の処理を実行します。 次のページを読み込めたので、記事の取得処理をしろってことですね。

83行目

 print STDOUT "\nPage ",$page+1," and before cannot read.";		# 読めなかった

81行目で読み込みに失敗した場合に巡回ウィンドウにメッセージを出力します。

終了処理

87行目

&fin;

85行目がATCLブロックの終わりです。 そこを抜けて来たら最終処理をします。 「fin」というのは最終処理をするサブルーチンです。

48行目でセットした$newptrで未読ポインタを更新したり、 「open」で開いたファイルなどをクローズしています。

88行目

 print STDOUT " - done.";

巡回ウィンドウに終了メッセージを出力しています。

89行目 は24行目のif(&init)の終端です。 24行目では初期設定が成功なら巡回を始めるんでしたね。

90行目

exit;

プログラムの実行を終了します。 INCMならプラグインの動作を終了して、巡回が終わることになります。

以上でISLANDプラグインでの解説を終わります。 次回は実際にプラグインを作成しながら、Perlでのプラグイン作成方法に ついて講義していきたいと思います。 題材はドムーパさんからリクエストのあった「ちびぼーど」です。

ベースにするのはサンプルプラグインでもいいんですが、今回説明に 使ってきた「ISLAND」でやってみましょう。 行き当たりばったりなので、完成しなかったらすいません。(^^;

キーワード

特になし

Prev : Next


トップ>Perl&CGI>基本編目次>INCMプラグインで覚えるPerl講座8

©Copyright 2002 GETWILD'74 All Rights Reserved
E-Mail:getwild@mail.wind.ne.jp