• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:紙谷氏の「Perl/CGI入門」、ハッシュeach関数の例題について)

Perl/CGI入門: ハッシュeach関数の例題について

noname#25358の回答

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 はいはい、補足です(笑) >each(%list) が返すのは (猫,cat) という  その通りです。  「猫」と「cat」がそれぞれ配列変数の値として入ります。 >print each(%list); と書く  print 文における配列の扱いは例外で、「中身をセパレータなしで並べて表示する」という動きをします。(セパレータを入れたい場合はシステム変数に設定)  ですのでこの場合、print 文は、each(%list) が返した('猫','cat')という配列の中身を、セパレータなしでつなげて「猫cat」と表示したわけです。 >この中にある、$list{$key} という部分ですが  はい、その通りです。  まず関数 keys は、ハッシュ配列変数のキー名すべてを配列にして返す関数です。  foreach は、その「返された配列」を1つ1つ $key に入れてループしてくれます。  すると、最初のループでは $key には '猫' が入ることになるわけですから、$list{$key} は $list{'猫'} と同じ意味になります。  もちろん、次のループでは $key には '犬' が入るわけです。  ですので、このプログラムと最初の質問のプログラムは同じ事をすることになります。

mika-o
質問者

お礼

丁寧にお答えくださって有り難うございます。 う~ん、しかし分かったような分からないような・・ 一度にたくさんのことを詰め込もうとし過ぎているのか、まだ混乱しています。 これから何度も読み直してみます。

関連するQ&A

  • Perl ハッシュの値のリストをスカラーコンテキストで評価すると?

    こんにちわ。 初めての利用です。 Perlの事で質問なのですが、 my $score=($hash{"fred"},$hash{"barney"},$hash{"wilma"}); とすると$scoreにはキー「wilma」に対応した値が代入される様です。 リスト形式をスカラーコンテキストで評価すると、リストの要素数を返すと記憶していたので、この場合$scoreには3が代入されると思っていたのですが・・・。 試しに my @scores=($hash{"fred"},$hash{"barney"},$hash{"wilma"}); $score=@score; とすると$scoreに3が代入された様です。 この二つの式では一体何が違うのでしょう・・・?

    • ベストアンサー
    • Perl
  • post と get

    postとgetの両方でデータ送信が行われる可能性がある場合(あるときはpost、あるときはget)に簡単に効率よくデータを変数に入れてやる方法ってありますか? 最初は$_REQUEST を使っていたのですが、これではクッキー情報も入ってしまったため、これはやめました。そこで今は下のような方法を考えています。 if(postならば){ while(list ($key, $val) = each($_POST)) { $INPUT[$key] = $val; } } else {//getなら while(list ($key, $val) = each($_GET)) { $INPUT[$key] = $val; } } ただ、検索の仕方が下手なのか、受信した送信形式がPOSTかGETなのかということを知る方法がわかりません。 どなたかアドバイスを下さい。

    • ベストアンサー
    • PHP
  • perlのexistsについて

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

    • ベストアンサー
    • Perl
  • eachの使い方

    教えてください。 例えば犬が3匹いて、「各々の」という言い方をしたい時、 each dogs is each dog is どちらを使ったらいいですか? また、さらに猫が3匹いるとき、 each dogs and cats is each dogs and cats are each dog and cat is each dog and cat are どれを使ったらいいですか? 参考書で調べれば調べるほど解らなくなって・・・。 助けて下さい。

  • フォームデータをハッシュで返すには?

    前画面の入力内容を&ReadParse()を用いて取得し、 その後テキストボックス名などのオブジェクト名と 入力内容をEUCに変換してハッシュで返すという サブルーチンを作っています。 サブルーチンなので不特定多数の画面から呼び出されます。 下記のとおりにしてみたのですが、うまくハッシュに入っていないらしく、値を取得することができません。 どのようにすればいいでしょうか? ----以下プログラム---- sub Comp_SetParam { &ReadParse(*form); # パラメータ受取 #引数として渡されたフォームデータを格納 while(($key,$val) = each(%form)){  #キー名(画面のオブジェクト名)をEUC変換  &jcode::convert(*key ,'euc');  #画面入力値をEUC変換  &jcode::convert(*val ,'euc');  %in = ("$key" => "$val"); } #ハッシュにし返す  return %in; }

    • ベストアンサー
    • Perl
  • 意味を教えてください。

    <?php @reset($HTTP_POST_VARS); while (@list($key,$val) = each($HTTP_POST_VARS)) { if ($key <> "pw_step") { echo "<input type=\"hidden\" name=\"" . $key . "\" value=\"" .        $val . "\">\n"; } } @reset($HTTP_POST_VARS); ?> 上記の書き方で$val.の.はつなげる意味と同じで使われているのですか? また、$keyと$valの関係を教えてください。 ネットでもこの記述が多いのですが、優しい解説がなくて・・・。 どなたか優しく解説お願いします(^.^)

    • ベストアンサー
    • PHP
  • arsort の key について

    こんにちは、Blackwinglsです。 ちょっと気になったので質問いたします。 以下のデータのポイント表があります。 データはSQLで order by name で取り出してます。 name point H氏 50p F氏 8p D氏 8p K氏 6p これを以下のscriptで出力すると <?php arsort($point); $count = 1; while(list($key,$val) = each($point)) { echo $key; echo ":"; echo $name[$key]; echo ":"; echo $val echo "<br>"; $count++; } ?> 3:H氏:50 2:F氏:8 1:D氏:8 4:K氏:6 と表示されますが、同じscriptを <?php arsort($point); $count = 1; while(list($key,$val) = each($point)) { echo $key; echo ":"; echo $name[$key]; echo ":"; echo $val echo "<br>"; $count++; } ?> <?php arsort($point); $count = 1; while(list($key,$val) = each($point)) { echo $key; echo ":"; echo $name[$key]; echo ":"; echo $val echo "<br>"; $count++; } ?> のように立て続けに書くと、 3:H氏:50 2:F氏:8 1:D氏:8 4:K氏:6 3:H氏:50 1:D氏:8 2:F氏:8 4:K氏:6 のように、同じ $point の場合、氏名が都度入れ替わるようです。 これって正常な動きなのでしょうか? order by name なので、氏名順に常に表示される気がするのですが・・・? 最近、php4からphp5に変更したら出たような気がするのですが、私の気のせい? どなたか情報お持ちの方、ご示唆くだされば幸いです。

    • ベストアンサー
    • PHP
  • ハッシュの中身の表示

    ハッシュの中身の確認ができなくて困っています。 下記のような実行文においてです。 当然、test の戻り値は、スカラーとハッシュです。ハッシュを戻すときには参照渡し記号の\もつけています。 my ($return_code, %hash_data) = test(); 表示しようとすると、 Hash(0x5b04) のような表示にしかなりません、、 (試した表示方法は、下記4つです。) (環境は、WindowsXP上での、ActivePerl-5.10.0.1004 です。) foreach $key ( keys( %Hash ) ) { print "キー値 : $key\n"; print "値 : $Hash{$key} \n " } while ( ( $key , $value ) = each %Hash ){ print "キー値 : $key\n"; print "値 : $value \n " ; } use Data::Dump qw(dump); print dump(\%hash); #print %display_test; 宜しくお願いします。

    • ベストアンサー
    • Perl
  • ハッシュの値のグループ化について

    入門本に、次のような例題がありました(主要部分の抜粋です)。 @list = (20,25,24,32,28,20,28,24,20); #年齢リスト foreach $fld(@list){   $syukei{$fld}++; } print "<table><tr><th>年齢</th><th>人数</th></tr>\n"; foreach $key( reverse( sort( keys( %syukei ) ) ) ){   $cnt = $syukei{$key};   print"<tr><th>${key}才</th><th>${cnt}人</th></tr></table>\n"; これの実行結果は、@list の年齢を各年齢ごとにカウントして、表に各年齢が何人であるかを表示します。 ・$syukei{$fld}++; の部分は $ハッシュ名{'キー名'} でハッシュを作ろうとしているのだと思うのですが、++ がなぜ付くのか分かりません。 ・↑の考え方が合っているとしたら、$cnt = $syukei{$key} で右辺は $ハッシュ名{'キー名'} を表しているのだと思うのですが、左辺がスカラー値を求めている場合はキーの数を返すというルールがあるのでしょうか? 私の質問にこだわらず、分かりやすく全体の説明をして頂ければ助かります。

    • ベストアンサー
    • Perl
  • hashをスカラー変数に渡す

    最近、perlを勉強し始めたのですが下記のようなサンプルコードを 見たことがあります。 hashをスカラー変数「$test」に渡している。そして「%$test」でhashに変換してeachで回している。最初から「%test」のようにしてeachで回せばよいと思うのですが実際の業務とかでhashをスカラー変数で受け取るようなことってありえるのでしょうか? my $test = { a=>'test_a', b=>'test_b', c=>'test_c' }; while( my ($key, $value) = each %$test ) { print $key ." : " . $value . "\n"; }

    • ベストアンサー
    • Perl