WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:リストについて教えて下さい。

0:[投稿] 靴下カタオ [URL] [2002/06/14 01:11 ][環境:WIN+IE UNIX系+Perl]

いつもお世話になっております。
リストについて基本的なことを教えて下さい。
無料配布の掲示板を

 http://www.KenAshizuka.com/jikken/ezbbs2.htm

にアップしています。
つまづいているのは、青文字で示した
『投稿者変更書き込みサブルーチン』です。
ここでフォームから入力された番号のレコードが
入力されたデータに置き換えられ、
その他のレコードは読み込まれたデータが
変更を加えられずに出力されています。

青文字、及び他の黒文字はオリジナルの部分ですが、
ここで、『他のレコード』の一番目の要素である
レコード番号を1だけデクリメントするために、
赤文字で示した3行を加えました。

これで実行したのですがレコード番号は
デクリメントされませんでした。
変数の中身を表示させたりして調べると、
shift、unshift 関数とも
実行している気配が全くないのです。

そもそも、@line というのは何なのでしょうか。
これはリストではないのでしょうか。
何かリストの概念が理解できていないようなのですが、
どうかよろしくお願いいたします。


1:[回答] ふじ [URL] [2002/06/14 03:30 ]

まず、@line と $line は、全く無関係です。
@line は配列。$line はスカラ変数。
@line の要素を添字で指定するときは $line[0] のようにしますが、
$line[0] と $line は、何の関係もありません。

これがヒント(というか多分誤解していると思われるところ)です。


で、このスクリプト中では、赤字の部分以外では @line という配列は使われていないようです。
つまり、赤字の部分を最初に実行する直前では、@line は要素が一つもない配列ですから、

$del_val = shift(@line);                                                    
# $del_val には undef が入る。(要素が一つもない配列から shift したので)

$del_val = $del_val - 1;                                                    
# undef を数値コンテキストで解釈して 1 を引いているので、
# $del_val には -1 が入る。

unshift(@line, $del_val );
# 配列 @line の先頭に $del_val を挿入したので、
# @line は (-1) になる。

@new_data = (@new_data,$line);
# @new_data には (@new_data, $line) が入る
# しつこいようだけど、@line と $line は無関係。


てことで、つまり、赤字部分の @line に対する操作は、データに対して
何の影響も及ぼしていないのです。

この場合、操作すべき配列は @line_data ですね。
結果を @new_data に書き戻すこともお忘れなく。


2:[完了] 靴下カタオ [URL] [2002/06/15 00:36 ]

ふじさん、どうもありがとうございます。
>このスクリプト中では、赤字の部分以外では @line という配列は使われていない
ほんとにそうですね。やっぱり理解できていないし、頭が混乱していました。
ふじさんから教えていただいたとおり、

             $line_data[0]--;
             $line = join (",",@line_data);
             @new_data = (@new_data,$line);

としてやって、うまくいきました。
どうもありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World