アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在DBMを用いて簡単なデータベースを作成しています。
どこぞのCGIゲームのように、リアルタイムにデーターベースの内容が書き換えられる(戦闘をすればお金がプラス等)ようにしたいのですが、うまくいきませんorz

#!/usr/bin/perl
use AnyDBM_File;
use Fcntl;
print "Content-type: text/html\n\n";

dbmopen(%DBM, 'id', 0666);
$DBM{"baka"} = ("0<>1<>2<>");
dbmclose(%DBM);
print<<"HTMLTAG";
DBを作成しました
HTMLTAG

tie %DBM,AnyDBM_File,"id",O_RDONLY,0666;

@aaa = split(/<>/,$DBM{"baka"});
untie %DBM;
print"$aaa[0]";
$aaa[0]++;

とりあえずこのスクリプトで、ブラウザの更新をおすたびに表示される数字が1あがっていく(プラスされて書き換えられる)ようにしたいのですが・・・
多分ですがゲーム等の場合、いちいちdbmopenで書き換えてないとおもうので、その方法を知りたいというわけです。
いちおうこの段階ではDB作成、DBの読み込みと表示はできています。
ご教授おねがいします。

A 回答 (3件)

>untieするまでは永続的に更新できるということですね??


そうです。
一度、DBMを作成しておけば、毎回作成する必要はありません。
tie で接続したら、前回までの更新の値が(DBMに保存されているので)そのまま使えます(つまり値が永続的だということ)。
    • good
    • 0

tie によるハッシュとDBMの結合を行っている場合には、


ハッシュに対する操作はそのままDBMに対する永続的な更新になります。
なので、スクリプトの最後にuntie するようにすれば良いです。
    • good
    • 0
この回答へのお礼

untieするまでは永続的に更新できるということですね??
ありがとうございましたー

お礼日時:2006/03/24 18:01

DBを更新しないとデータが変わらないのだから、DBを更新するしかないと思います。

この回答への補足

ではゲーム系CGIはどのような構造なのでしょうか・・・
DBMをオープンするサブルーチンを呼び出した後、
$aaa[0]++;等でDB内の値を変えるとDBが更新されているのです。
何かが起こるたびにDBが書き換えられているのでしょうか?

参考にしているゲームのDB読み込みのサブルーチンは
tieで読み書きモードで呼び出し、それぞれの値を
splitを使って配列に入れ込む。ただそれだけです。
DB作成のルーチンも特別なものがなく、戦闘部分のサブルーチン内でDB読み込みのサブルーチンが呼び出され、戦闘が行われた後の処理が続いています。($aaa[0]++;とか)
結構探しましたが、$DBM{"baka"} = ("0<>1<>2<>");のような記述がDB作成の部分しかみあたらずでした。
説明がややこしくてわかりずらいですが引き続きお願いします

補足日時:2006/03/24 12:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!