CGI-BBS > CGI > Perl > 読み込んだHTMLファイルの文字列を置き換えたいのですが。


カレッヂ
カレッヂ


質問者 あまちゃ  投稿日 9/16(日) 23:27:35
フォームから来場者名と居住地を入力してもらい、
それを別のHTML文書(短編小説のようなもの)の中で使用したいのです。
文章中の名前などのところに印をつけておいて、
受け取ったデータで置き換えると言うような処理はどうしたらいいのでしょうか。

とりあえずこういうのを考えたのですが、
案の定と言うか、動きません。
置換方法を教えて下さい。

$stoly='stoly.html';
open(SS,"<$stoly");
@naiyou=<SS>;
close(SS);

                        $index=0;
                        while($naiyou[$index]){        
                                                                if($naiyou[$index]=~/$name/){
     $name=$data{'name'};        
                                                                                }
                                        if($naiyou[$index]=~/$city/){
                                        $city=$data{'city'};        
                                                                        }
                        $index=$index+1;
                        }
回答者 vagabond  [削除]  投稿日 9/17(月) 00:16:21
まず、一度、stoly.htmlを読み込み、それを置換してstoly.htmlに書き込みを
しなくてはいけません。
で、サンプルとして作ってみました。$name,$city,%dataは適当につけてます。
ついでに、元のファイルのバックアップをとるようにしました。

use strict;
my $stoly='stoly.html';
my $name="monkey";
my $city="tokyo";
my(@buffer1,@buffer2);
my %data=(name=>"mouse",city=>"new york");
local(*SS,*NEW);

open(SS,"<$stoly");
my @naiyou=<SS>;
close(SS);

for(@naiyou){
        my $newline=$_;
        if($newline=~/$name/i){
                $newline=~s/$name/$data{name}/g;
        }
        if($newline=~/$city/i){
                $newline=~s/$city/$data{city}/g;
        }
        push(@buffer1,$newline);
        push(@buffer2,$_);
}

open(NEW,">$stoly");
for(@buffer1){
        print NEW;
}
close(NEW);

open(BACKUP,">$stoly".".bak");
for(@buffer2){
        print BACKUP;
}
close(BACKUP);
質問者 あまちゃ  [削除]  投稿日 9/17(月) 17:19:10
あ、書き換えをしてませんでしたね。
直したら無事動きました。
ありがとうございました。

返信(回答)する


Web裏技