カレッヂ |
質問者 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裏技 |