• ベストアンサー

参照配列の要素数の求め方は?

リファレンス配列の要素数は、$#では求められないのでしょうか? ------------------------------------- foreach $i(0 .. 3){ $hash->[$i] = $i * 100; } print "\%hashの要素数->$#hash\n"; $ref = \%hash; print "\%{$ref}の要素数->$#{$ref}\n"; -------------------------------------

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

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

んーと 配列のリファレンスをつかった例でしたら... foreach $i(0 .. 3){ $hash[$i]->{'v'} = $i * 100; } # 配列@hashへのリファレンス $ref = \@hash; # デリファレンス @copy = @{$ref}; print "\$refの要素数->$#$ref\n"; print "\@copyの要素数->$#copy\n"; あと配列 @hash と連想配列 %hashは内容は別物ですので 期待した動きにならないのだと思います...

xespr
質問者

お礼

なるほど!素晴らしいご回答ありがとうございます! 期待実現できました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

こんちは print "\%hashの要素数->$#hash\n"; ↓ print "\%hashの要素数->$#{$hash}\n"; でどでしょか

xespr
質問者

お礼

すみません。最初のループ間違えました。 foreach $i(0 .. 3){ $hash[$i]->{'v'} = $i * 100; ## $i番目の要素の'v'プロパティをセットするイメージです } これでも print "\%hashの要素数->$#hash\n"; でうまく出ます。 ところが、参照リファレンスだと簡単に出ません。 %copy = %{$ref}; print "\%copyの要素数->$#copy\n"; @copy = @{$ref}; print "\@copyの要素数->$#copy\n"; 連想配列としても使えません。 foreach $i(keys %hash){ print "by \%hash $i\n"; } foreach $i(keys %{$ref}){ print "by \%{$ref} $i\n"; } foreach $i(keys %copy){ print "by copy $i\n"; } 使い方が間違ってるのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A