• ベストアンサー

perlのインクリメントの意味

インクリメントって言うのは値を1つくわえるという意味ですよね?  本を読んでいてなんだか今までやってきたインクリメントの説明と結びつかない内容が出てきました。  「つまり「MAIE 5.01」などの文字列で、「MSIE 5」までの部分にマッチしたりするわけです。 その場合には、$ua_freq{"MAIE $1"}の$1が変数展開されて、「MSIE 5」や「MSIE 4」などになりますので、コレをハッシュ%ua_freqのキーとする要素の値をインクリメントします。 」  ここにインクリメントと出ていますが、1をくわえると言う意味になるのでしょうか?なんだか、1を加えるというのが結びつかない感じがします。  この場合のインクリメントとはどういう意味で書いているのでしょうか?  よろしくお願いします。ちょっと素人ですので、わかりやすいように説明をしていただけると嬉しいです。  

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

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

#1>インクリメントの意味がわかりますでしょうか? やはり、1プラスしているのですね。 アクセスログから、どのブラウザから何件のアクセスがあったかをカウントしているのだと思います。

torotoro2
質問者

お礼

ありがとうございました~! なんだか僕が誤って理解してました。 1プラスするということはカウントしているということになるんですね!  大変参考になりました♪

その他の回答 (2)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

答えが出ていますが補足。 その文章は if($agent =~ /MSIE (.)/) { ++$ua_freq{"MSIE $1"}; } この3行に対する解説のようです。 逆に、この3行のコードの動作が理解できれば、その解説文が説明しようとしている事がわかってくると思います。

torotoro2
質問者

お礼

ありがとうございました! このコードをもう一度説明見て、教えてもらったように1プラスするのがわかって結びつきました!  本当にCGIの勉強始めたばっかりなので・・といっても1ヶ月は過ぎますが、難しいです・・;

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

前後の関係がわからないんで、なんですが、やはり、1プラスするという意味だと思います。 ようは、出現回数を数えている(あるいは、そのキーがあったことを表す)のだと思います。

torotoro2
質問者

補足

夜遅く早速のご回答ありがとうございます! そのコードはこれになります # クセスログ集計 while($ln = <FILE>) { # 項目の切り出し  ($hour, $min, $host, $refer, $agent) ⇒ = split(/\t/, $ln); ++$freq[$hour]; #ユーザーエージェントの集計 if($agent =~ /MSIE (.)/) { ++$ua_freq{"MSIE $1"}; } elsif($agent =~ /Mozilla\/(.)/) { ++$ua_freq{"Mozilla $1"}; } else { ++$ua_freq{"other"}; } # リンク元の集計 if($refer) { ++$ref_freq{$refer}; } } >>そのキーがあったことを表す それは1つ加えるとか関係ないのでしょうか?  このコードでインクリメントの意味がわかりますでしょうか?よろしくお願いします。

関連するQ&A

  • perlのexistsについて

    変数の値と別のハッシュのキーに一致するものがあれば、ハッシュの値を別のスカラー変数に代入したいのですが、その場合のプログラム例を教えてください!

    • ベストアンサー
    • Perl
  • Perlインクリメントデクリメント

    あっていますでしょうか? インクリメント演算子とデクリメント演算子 インクリメント(加算)演算子は変数の数値を一つ増やす。 デクリメント(減算)演算子は変数の数値を一つ減らす。 ++ インクリメント演算子 変数の値を1増やす $a++ ++$a $aの値を1増やす -- デクリメント演算子 変数の値を1減らす $a-- --$a $aの値を1減らす $a=1; 変数$aに1を代入する print "はじめは$aでした。\n"; $aの代わりに1が入り はじめは1でした。と表示する。 $a++; $aに1を足す。 print "1増えて$aになりました。\n"; $aの代わりに2が入り、1増えて2になりました。 と表示する。 $a--; $aから1減らす。 print "1減って$aに戻りました。\n"; $aの代わりに1を入れて 1減って1に戻りました。 と表示する ↓ 実行結果 ↓ はじめは1でした。 1増えて2になりました。 1減って1に戻りました。 $a++ と ++$a の違い インクリメント演算子、デクリメント演算子には2通りの書き方があります。 ++$a(前置)と$a++(後置) --$a(前置)と$a--(後置) 前置の場合は変数の参照より先に演算が行われます。 後置の場合は変数の参照より後に演算が行われます。 $x=$a=1; 変数$xと$aに1を代入する。 $x=++$a; $aに1を足した後に$xに代入する。$xの値は2になる。 $x=$a=1; 変数$xと$aに1を代入する。 $x=$a++; 変数$aの値を$xに代入した後に$aに1を足す。$xの値は1。 文字もインクリメント出来ます。 $x="A"; "A"を$xに代入する。 $x=++$x; Aから一つ増やしてBにして$xに代入する。 $x="aaa"; "aaa"を$xに代入する。 "aaa"を一つ増やして"aab"を$xに代入する。 ただし、文字のデクリメントはできません。

    • ベストアンサー
    • Perl
  • インクリメントしてくれません

    配列mousの各要素を配列tousと照らし合わせ、マッチしたら変数countにインクリメントし、何回マッチングしたかを返す関数を作りました。 でも、なぜか1回しかインクリメントしてくれません。 確認のため試しにcount++部分をputf("テスト表示")に置き換えた場合マッチングした回数だけ「テスト表示」表示されました。 じゃあなぜ、変数countは一回しかインクリメントされないのでしょうか? #include <stdio.h> int DataMatch(int *, int *); void main() { int mous[6] = { 1, 15, 12, 23, 33, 42}; int tous[7] = {10, 15, 19, 23, 33, 42, 11}; int test; test = DataMatch(mous, tous); printf("%d%\n", test); } ////////////////////////////////////////////////// int DataMatch(int *buffer1, int *buffer2) { int i, j, count; for(i = 0; i < 6 ; i++ ){ for(count = 0, j = 0; j < 6; j++){ if(buffer1[i] == buffer2[j]){ count++;//インクリメントしてくれない! break; } } } return count; }

  • 後置インクリメントについて質問

    以下の式はxに10が代入されているとします。 そして、yに21が代入されるまでのプロセスです、それを見た上で私の質問に答えてください。 y=x++  + x++ ; 1. y を評価する (今の場合, 代入の左辺なので変数 y の位置を求める). 2. x++ + x++ の左の x++ を評価する. 値として「x の現在の値」である 10 が得られ, 後置インクリメントの副作用としてこの時点で x の値は 11 になる. 3. x++ + x++ の右の x++ を評価する. 値として「x の現在の値」である 11 が得られ, 後置インクリメントの副作用としてこの時点で x の値は 12 になる. 4. 2 と 3 で得られた値を使って加算を行う: 10 + 11 = 21 が得られる. 5. 1 で得られた「変数 y の位置」に 4 で求めた値 21 を代入する. 質問:上記のプロセスのように、後置インクリメントは、「変数を評価した直後」に値が増えるんですよね?

    • ベストアンサー
    • Java
  • インクリメント演算子について

    i = 1の場合 i++は変数iの値を返してから、1加算する ++iは変数iに1を加算し、その値を返す この「返す」とはどういう意味ですか?

    • ベストアンサー
    • Java
  • 正規表現preg_matchでincrement?

    foreach($data as $key=>$val) { if(preg_match("/^increment\((\-?\d+)\)$/i",$val,$m)) $q.= "`$key` = `$key` + $m[1], "; ・上記のようなif文があるのですが、どういう意味でしょうか? ・incrementはカウントアップ? ・$valに「-1」…「-9」文字列があれば、$m[1]として利用? ・iがあるので、その際、大小文字の違いを無視?

    • ベストアンサー
    • PHP
  • 紙谷氏の「Perl/CGI入門」、ハッシュeach関数の例題について

    ハッシュのeach関数を使って「猫はcat犬はdogお茶tea」と表示させるプログラムの主要部分です。 %list = ("猫"=>"cat" , "犬"=>"dog" , "お茶"=>"tea"); while( ($key,$val) = each( %list ) ){   print "$keyは$val"; } whileの条件部分の意味が分かりません。 ・なんで条件部分なのに代入みたいな式が入るのか? ・$keyと$valというのは普通のスカラー変数とは違うのか? 良く分からないので質問の仕方もおぼつかないですが、どなたか分かりやすく説明して頂けないでしょうか?

    • ベストアンサー
    • Perl
  • 後からAUTO_INCREMENTの値を1にする方法

    MySQL=4.0.26 phpMyAdmin 2.6.4-pl4を使用しています。 AUTO_INCREMENT(int11)が自動追加されて、数値が70になったとして レコードを削除しても数値が1になりません。 プライマリーキーの関係かなと思いますが、 後からphpMyAdmin上でAUTO_INCREMENTの値を1にする方法、また、自由に数値を変更する方法を教えて頂けないでしょうか。 初期の段階でDBを構築する場合でSQLを実行する場合の AUTO_INCREMENTは解るのですが、 たとえば PRIMARY KEYを(`no`)として TYPE=MyISAM AUTO_INCREMENT=1; として、正常に利用していますが、 DB構築後、レコードが登録された後、phpMyAdmin上で レコードを削除した後またAUTO_INCREMENT=1などにする方法が 解りません。 説明べたで申し訳御座いませんが、 どうぞ宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • Perlでハッシュや配列で重複するキーについて

    ハッシュで重複するキーが値となるので、このハッシュはabdの3つのキーしか存在しないということでしょうか? %a = ('a'=>1, 'b'=>2, 'a'=>3, 'd'=>4); また、配列の場合はabadと4つ数になるということでしょうか? @a = ('a','b','a','d'); この場合配列で、重複する値を抽出するアルゴリズムが知りたいです。

    • ベストアンサー
    • Perl
  • 後置インクリメントについて質問

    java解説書に以下のような説明がありました。この説明は、後置インクリメントについての説明です。 「xは10が代入されているとする。 y=x++ + x++ ; //最初の状態。xは10です y=10+ x++ ;//10をそのまま加算し、xを1加算します。xは11です。 y=10+ 11 ;//11をそのまま加算し、xを1加算します。xは12です。yは21になります。」 質問:上から2番目のコメント文の中で、「10をそのまま加算し」とありますが、これは何に加算するんですか?何も入ってないyに加算するということでしょうか?それとも それともxにxを加算するという意味でしょうか?参考書の書き手の意図がわかりません、、。 質問2:yが21、xが12になるプロセスは、 yにx(10)が加算される      ↓ yにx(10)を代入した(計算した)「直後」であるから、後置インクリメントによりxが1増えて、xが11になる      ↓ x(11)をyに代入 ↓ yは21になる ↓ yに11を代入した(計算した)「直後」であるから、後置インクリメントによりxが1増えて、xが12になる こういうことでしょうか? 質問3:質問2の計算プロセスのように、左辺の変数が、右辺の変数が+で繋がれていた場合、左の項から順に足されていくということでしょうか?

    • ベストアンサー
    • Java