新規記事投稿 フォロー記事投稿 記事のキャンセル
From: 三葉工房の管理者 <nature-create@amy.hi-ho.ne.jp>
Subject: 何故,delete出来なかったのか!(投稿のやり直し)
Date: 1999/01/24 11:51:12

メッセージがコンパイルされてしまいましたので再投稿します。

TAD様,いしどう様アドバイスどうもありがどうございます。


何故,deleteがうまく行かなかったのか,一昨日,質問メッセージを投稿してから
寝床の上で色々と考えました。そして,昨日は,出かけていましたので,パソコン
を立ち上げなかったので,今日そのあまり期待出来ない,念の為と言うデバック法
を実行してみました。

それは,
sub cutplay{
print "Content-type: text/html\n\n";
print <<"ALPS";
<html><head><title>削除処理完了</title><meta http-equiv="refresh" content="5; url=$NEWURL "></head><body bgcolor=\"#ff0000\">
ALPS

open (CAT, "$BaseDir/$in{'Cat'}") || die "ファイルが開きません!\n,
何処かの構文が間違っています!";
@lines = <CAT>;
close (CAT);

open (CAT, ">$BaseDir/$in{'Cat'}") || die "ファイルが開きません!\n,
何処かの構文が間違っています!";
foreach $ereize (@lines){
@catchin=split(/&&/, $ereize);
if("$catchin[0]$catchin[2]$catchin[3]" ne "$in{'target'}")
{print CAT "$ereize";}
}
close (CAT);
print <<"ALPS";

<center><font color=\"#00ff00\" size=6><b>削除処理完了</b></font><p>
<font color=\"#ffff00\" size=5><b>彼方のチェック為た記事を削除しました。</b></font><p><font color=\"aqua\" size=4><b>$in{'target'}</b></font><p><a href=\"golygth.cgi\"><font color=\"#ccffff\" size=5><b>掲示板へ戻る</b></font></a></center></body></html>
ALPS
exit;}



と言うサブルーチン内の
open (CAT, "$BaseDir/$in{'Cat'}") || die "ファイルが開きません!\n,
何処かの構文が間違っています!";
@lines = ;
close (CAT);
と言うファイルを開いて読み込む実行文の@linesをforeachでhtmlで出力させて,
$in{'target'}の内容の文字列と@lineの中のその変数と一致する内容の文字列を
MACPERLのテキストにコピーして,それらを比較して見ました。

その結果,日付の1999年(平成11年)01月22日  金曜日12時19分47秒が
日と曜日の間の間隔が1間隔,@linesから読み込んだ方が空いていると言う違いがあり,
コンパイルしてみると,それが元で異なる文字列にされてしまう事も確かめられました。
つまり,$in{'target'}のは,@lineから読み込んだ原版の文字列が先ほどの間隔の
幅は,半角2つと$value =~ s/  / /g;の文字変換にマッチしてしまい,その結果,
$in{'target'}の方の間隔が2間隔から1間隔に変換されて,その結果,デリートするにも
一致文字列が無くなってしまい,失敗した事が分かりました。
その$value =~ s/  / /g;を~ s/   / /g;とマッチ条件を空白半角3つに改良して,デリート
を実行したら,今度は,チェックを入れた記事がどんどん消されて行きました。

よく考えて見ますと,今回の実行不正立はデバックに苦労しても仕方がなかったと思います。
思い込みだと,その原因はなかなか気付かない事と思います。

後,その掲示板は,あくまでもテスト用なので勝手に書き込みしたり勝手に消去してみても
構いません。

いしどう様の紹介して下さった「実践入門perl」ですが,実は,私がperlを始める際に,まず
購入した書籍です。後は,駱駝本を持っています。

やれば出来ます。

又,つまづいた点が見つかりましたら改めて宜しくお願い申し上げます。