- ベストアンサー
出力結果の解析方法と注意点
- 出力結果の解析方法と注意点
- 出力結果が 'HASH(0x197fa1c)' のような形式で表示された場合、解析方法を紹介します。
- 表示されたキー値が未初期化の値である場合があります。注意が必要です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2の繰り返しになります。 > %$itemsのキーを取得するのはではないのですね。 は正しいのですが、その取得したキーを「使っていない」のです。 http://perldoc.jp/docs/perl/5.20.1/perlsyn.pod#Foreach32Loops マニュアル(の和訳)です。 > foreach ループは 通常のリスト値に対しての繰り返しを行い、変数 VAR に リストの要素を繰り返し一回に一つずつセットします。 > VAR が省略された場合には、$_ に値が設定されます。 とあります。 foreach ( keys %$items) は、この 「VAR が省略された場合」に相当します。 ということは、リスト値 keys %$items から取り出した値は $_ の設定されています。 その $_ に設定した値を使わずに、「 $key 」を出力しようとすれば、全然違うものが出力されるのは当り前です。 また、この前にある my $key ; という文と、このforeach は「無関係」 です。 修正するなら、実行ブロック内では $_ を使うか、foreachに使う変数として$keyを指定するか、です。 my $key; で宣言しただけでは、 $key の中身は「初期化していない値(uninitialized value)」です。 Perlの標準動作では、uninitialized valueを使って"キー値 : $key\n" 等としても、エラーになりません。 ですが、 perlに-wオプションを付けると、警告を出すようになります。 その警告が、Use of uninitialized value $key ~ です。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
#2 に書かれていることは理解できていますか?
- kmee
- ベストアンサー率55% (1857/3366)
ちなみにエラーになっている理由は 「Use of uninitialized value $key 」(初期化されていない値 $key を使っている) からです。 my $key; と宣言しただけで、値を代入していません foreach ( keys %$items) { と、ループ用変数の指定無しにforeachを使うと、 $_ が使われます。$keyを勝手に使ったりはしません。
- Tacosan
- ベストアンサー率23% (3656/15482)
「解析」って, 具体的には何をしたいんでしょうか?
補足
HASH(0x****)のキーとバリューを調べたいのですが、方法がわかりません
補足
HASH(0x****)のキーとバリューを調べたいのですが、方法がわかりません。 %$itemsのキーを取得するのはではないのですね。