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

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

第3回 フォルダプロパティの定義とプラグイン実行時の初期化

まだ記事の取得には入りませんが、条件分岐など重要な内容です。

フォルダプロパティの定義

まずは6行目から22行目まで

#####  フォルダプロパティの設定  ###########################################

$_= <<"#[/DIALOG]";
#[DIALOG]
 #URL=1\nUPURL=1\nNAME=1\nEMAIL=1\nHP=1\nKEY=1
 #USER=1\nPASS=1\nPARAM1=1\nPARAM2=1
 #_URL=掲示板のアドレス(URL)(&A):
 #_UPURL=書き込み先のアドレス(URL)
 #_NAME=名前:
 #_EMAIL=メールアドレス:
 #_HP=ホームページ(URL)
 #_KEY=削除キーor管理者マスターキー
 #_USER=
 #_PASS=
 #_PARAM1=
 #_PARAM2=未読ポインタ
#[/DIALOG]

これはプロパティ用の定義になります。

$_= <<"#[/DIALOG]";

ヒアドキュメントと言いまして、この行以降#[/DIALOG]までを 「$_」に記述した通りに代入しています。 良くCGIでHTMLを「print」をたくさん使わずに出力するのに利用されてます。 これをINCMがどう処理してるかまでは分かりませんが、 この文はいじる必要はないです。

 #URL=1\nUPURL=1\nNAME=1\nEMAIL=1\nHP=1\nKEY=1
 #USER=1\nPASS=1\nPARAM1=1\nPARAM2=1

は、各設定項目を利用するかどうかの設定です。

HP=1となっていれば、ホームページの設定が入力可能になります。 HP=0にすれば、ホームページの設定は灰色になって入力不可になります。

 #_URL=掲示板のアドレス(URL)(&A):

などは、プロパティダイアログで各項目に表示する文字です。 「=」以降に必要な文字を記述すればいいだけです。

他に詳細設定関係もここで定義できますが、それはまたの機会ということで。

条件分岐

続いて24行目

if(&init){

この「if」は条件分岐になります。書式は

if(「条件」){
「条件が真の時の処理」
}

となります。 24行目の「if」の閉じ括弧「}」はプラグインの最後のほうの89行目にあります。 条件がの時というのが馴染みのない人には分かりにくいかもしれません。 簡単な構文を例にしてみます。

if($ABC){ $ABC = 0; }

「$ABC」が真なら「$ABC」に「0」を代入しています。 真とは「0」以外の数値または文字列です。 この逆がで「0」や文字列の「0」や「空文字」です。

if($ABC >= 1){ $ABC = 0; }

とすると「1」以上なら

if($ABC == 1){ $ABC = 0; }

とすると「1」なら

と言うことになります。 最初に書いた書式と違いますが、このように一行で書くことも出来ます。 行を分けるのは可読性を良くするためです。

では、さっきのプラグインの条件を見てみましょう。 「&init」となっています。 これは前回読み込んでおいた「CMLIB15」内のサブルーチンを呼出しています。 「init」というサブルーチンでは、巡回前の初期設定をしています。 これがどうして条件に使われているのかと言うと。 サブルーチンには戻り値というものがあります。 「init」での初期設定問題がない場合には「1」という数値が返ってきます。 ということは、ここの条件分岐は初期設定が上手くいったら 「{}」で囲まれた部分の処理をさせるということです。 「{}」内は巡回処理なので、初期設定に失敗したら巡回せずに終了します。

次はその囲まれた中の処理に入ります。 28〜30行目です。

unless($local){			# ローカル変換でなければ接続
 &httpget('>001.cm$',"") || exit;
}
unless($local){

は、コメントがあるようにINCMのインポート機能を使ってるかどうかの 判定をしています。

「unless」は「if」の逆の意味を持っています。

「if」であれば、「$local」が真ならということになりますが、

「unless」では、「$local」が偽なら、ようするに真でなければと言うことです。

ここを

if(!$local){

とすると「if」でも同じ処理が可能です。 「!」は次に記述されている変数を否定しています。 「$local」は先ほどの「init」内でローカルかどうか判定して設定されます。

掲示板を巡回する場合はローカルではないので、次の

 &httpget('>001.cm$',"") || exit;

を実行します。

&httpget」はサブルーチンを呼出しているんでしたね。 さっき説明し忘れましたが、サブルーチン名の前に「&」を付けることで サブルーチンを呼出すことができます。 今度はさっきと呼出し方が少し違いますね。

('>001.cm$',"")というのがくっついてます。 これはサブルーチンに渡す引数です。 「,」で区切ることで複数の引数を渡せます。 ここでは「>001.cm$」と「(中身がない)」を渡しています。

最初のは巡回時に作る記事取得用の一時ファイル名です。 「>」はファイルを上書きモードで開きます。 「001」の部分は任意に変えられますが、通常は変えなくても問題ないです。

.cm$」は変更することは出来ません。 次の「""」は空を渡しています、なくてもいいんですが、あったほうが 視覚的にはいいかもしれません。 何も入ってないと「GET」でURLにアクセスします。 パラメータが入っていれば「POST」でアクセスします。 通常はこのプラグインと同じまま書けば問題ないです。

このサブルーチンを呼出している行に

 || exit

と続いてますが、これも戻り値を利用したものです。 「httpget」は掲示板にアクセスする役目も持っています。 それが成功したかどうかが戻り値として設定されます。 「||」は「or」ということで、これの左右どちらかの処理をします。

ここでは

「真の時の処理」 || 「偽の時の処理」

ということをしています。 「exit」はperlの処理を終了させる命令です。 ようするに掲示板にアクセス出来なかった場合は巡回を終了させてます。

$_."CMLIB15.PL"

次回はCMTヘッダの出力なんですが、読み取りではなく書き込みに関する 話になってしまいます。

キーワード

Prev : Next


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

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