![]() |
| カレッヂ |
質問者 k_taro
投稿日 2/14(金) 10:27:18
ここでの質問が適切でないかもしれませんが、教えていただければ幸いです。
コードで削除に関係あるカ所は何ヶ所かありますが、
以下のコードでどうしてそうなるかわかりません。
教えてください。
sub mado_1 の始めの方で
if (open(ORDER,"$tmp$COOKIE{'CART'}\.bk6")) { #かごの中身を読みこむ
while (<ORDER>) {
s/\n//g;
if (/^#|^$/) { next;}
if (/^\*(\d+)/) {
$DELETED{$1} = 1; #1
$del ++;
}else {
push(@CARGO,$_);
}
}
close(ORDER);
}
中ほどで
foreach (@CARGO) {
($code, $name, $fee) = split(/\t/, $_,3);
if ($DELETED{$code}) {next;} #2
$SHOKEI += $fee; # 累計
($fee,$fee2) = &comma($fee);
とありますが、
#1で $_ にフラグをつけている?
#2で $_ のフラグを認識している?
がどうも理解できません。どなたかか解説してください。
プロバイダ参照: |
回答者 呑兵衛@大阪
[削除]
投稿日 2/14(金) 19:47:06
日本語風に書くと
if (/^\*(\d+)/) { $DELETED{$1} = 1;
#1 買い物履歴の一行に 行頭が*続いて数値の1つ以上の連続($date_num)があれば
# ハッシュ変数DELETEに、キー{$date_num}、値に 1 という要素を作る
foreach (@CARGO) {
# リストCARGO を一行ずつ読み出し
($code, $name, $fee) = split(/\t/, $_,3);
# 一行の各要素を $code $name $fee にそれぞれ代入
if ($DELETED{$code}) {next;}
#2 代入作業中、ハッシュ変数DELETEにもキー{$code} を代入し、キー{$date_num}、値に 1 という要素と
# 一致($codeに#1の$date_numが該当)すれば無視して次の作業 |
質問者 k_taro
[削除]
投稿日 2/16(日) 10:55:17
呑兵衛@大阪 様
回答有り難うございます。
ハッシュのこのような使い方が出来ることを初めて知りました。
foreach (@CARGO) {
($code, $name, $fee) = split(/\t/, $_,3);
if ($DELETED{$code}) {next;}
で
($code, $name, $fee)の$codeと$DELETED{$code}の$codeを比較参照している?
ところが、自然なのでしょうが、なんか不思議な気もします。
たとえば
sub mado_1 の始めの方で
if (/^\*(\d+)/) {
$delNum=$1;
#$DELETED{$1} = 1; #1 この部分を上の行に書換えて
$del ++;
中ほどで
foreach (@CARGO) {
($code, $name, $fee) = split(/\t/, $_,3);
if($_=~/$delNum/) { next; }
#if ($DELETED{$code}) {next;} #2 この部分を上の行に書換える。
#1 #2の部分を書換えても同じかと思ったが結果だめでした。
違いが分かりません。 |
回答者 呑兵衛@大阪
[削除]
投稿日 2/16(日) 17:17:57
> $delNum=$1; 削除される項目は1つとは限らない。2つ以上になると $delNum は上書きされる。 だからハッシュ処理されています。 |
質問者 k_taro
[削除]
投稿日 2/16(日) 17:35:31
呑兵衛@大阪 様 またまた回答有り難うございます。 やっとハッシュでフラグ処理している意味が分かりました。 有り難うございます。 |
このページは終了したので返信(回答)は書きこめません
| Web裏技 |