• 締切済み

DBMのことで・・・

現在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の読み込みと表示はできています。 ご教授おねがいします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

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

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

tie によるハッシュとDBMの結合を行っている場合には、 ハッシュに対する操作はそのままDBMに対する永続的な更新になります。 なので、スクリプトの最後にuntie するようにすれば良いです。

show0122
質問者

お礼

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

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

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

show0122
質問者

補足

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