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

お世話になります。

早速ですが、
xファイルから指定番目のレコードを削除するcgiを作成しています。

ロジックは簡単で、
指定があれば実際の削除作業(a-rtn)、
指定がなければ(初期状態)削除位置を指定させる画面表示(b-rtn)を
それぞれ実行するようなロジックです。

問題なく動いていましたが、
これまではa-rtnでのみ「全レコード数」を表示していたのですが、
このほど、b-rtnでも「全レコード数」表示したいと思い手を加えました。
実際にやったことは、a-rtnにあった下記の部分をb-rtnへ移動しただけです。
(初めに読んでおけば残っているので、後で使えると思っての対応です)

open(IN,"$file") || &error("Can't open $file");
@lines = <IN>;
close(IN);
$kensu = @lines; #全体件数

ところが作業をしてみると、
b-rtnでは「全レコード数」が表示されましたが、
a-rtnではレコードが無くなっていました。
(と言うより、読めていないのかなと思っています)

状況は以上ですが、
@linesに読み込んだデータは残っていると思っているのですが、
一度サーバーに帰ると消えてしまうのでしょうか。
移動ではなく、コピーにしたら問題なく稼働しています。

分かりにくい質問かと思いますが宜しくお願いします。

A 回答 (2件)

Perl中の変数の内容は、現在の要求の HTML を出力し終った時点で無くなります。

出力したHTMLに対して閲覧者が次に操作を行なった時、前回の処理結果はもはや利用できません。

これで、答えになっていますか?
    • good
    • 0
この回答へのお礼

早速有り難うございました。
やはりそうでしたか。
十分なる回答です。

この回答で充分なのですが、
ついでにお聞きします。

今回のようなケースはa-rtn、b-rtnでそれぞれ読めば良いのですが、
a-b間をデータ引き渡しなどしたい場合は、
ファイルを一旦出力して読むという手段が当たり前なのでしょうか。
何か良い考え方があれば教えていただきたいのですが。
宜しくお願いいたします。

お礼日時:2009/10/07 16:42

> ファイルを一旦出力して読むという手段



これは、最後の手段ですね。 なぜかと言うと、大変な処理になるからです。

CGI と言うものは、複数の閲覧者から前後してあるいは同時にアクセスされる状況を想定せにゃなりません。 閲覧者対応に一時ファイルを管理したり用済みの一時ファイルを消す処理は、かなり大変です。


ではどうするかと言うと、条件によって複数の方法を使い分けます。

記憶すべきデータの容量(バイト数)が多い場合には、一見無駄な様でも再度データを作り直すのが良いでしょう。

容量が少い場合は、CGIパラメーターとか Cookie とかを使います。

CGIパラメーターというのは、URL末尾の「?」以降の部分です。 FORMを使ってるなら、 <input type="hidden" name="aaa" value="bbb"> とか書きます。

Cookie は、CGIパラメーターに慣れてからの方が良いかと。
    • good
    • 0
この回答へのお礼

何回も有り難うございます。

確かにそうですね、
言われてみるとよく分かります。
誰に対してもサーバーに書き込んでいたら飛んでもなくi/oが発生します。

何気なく(知らないで、そういうモノだと言うことで)使っていましたが、
FORMが解決していたのですね。
少なくともやりとりする部分を最小にすることが設計の初めと言うことですね。

よく分かりました。
お世話になりました。

お礼日時:2009/10/08 05:35

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