dポイントプレゼントキャンペーン実施中!

2次元風配列$yaoya_array[$i][$j]から、ハッシュのハッシュ%yaoyaを作成しようとしています。
$yaoya_array[$i][$j]の[$j]の部分は、添え字によって、以下のようなデータを表します。また、NULLの場合もあるとします。

#--- $yaoya_array の中身
$yaoya_array[$i][0] 品物の名前
$yaoya_array[$i][1] 品物の個数
$yaoya_array[$i][2] 品物の値段

上記のデータがダブりもありで、下のように複数個存在します。

#--- $yaoya_array の中身
$yaoya_array[0][0] = 'みかん';
$yaoya_array[0][1] = 3;
$yaoya_array[0][2] = '';
$yaoya_array[1][0] = 'みかん'
$yaoya_array[1][1] = '';
$yaoya_array[1][2] = 300;

上記のデータから、下記のようなハッシュのハッシュ%yaoyaを作成しようとしています。要するに、ばらばらに存在する品物のデータをまとめようとしています。

%yaoya = ('みかん' => {'個数' => 3, '値段' =>300});

そこで、下記のようにしてみたのですが、forループが終わった時には、'kosuu'に何も入っていません。具体的には、1回目のループで'kosuu'=>3、'nedan'=>""になり、2回目のループで'kosuu'=>""、'nedan'=>300となってしまい、'kosuu'=>3が保存されていないみたいです。ifでNULLの場合は値を代入しないようにしているつもりなのですが…。
ループ終了時に'kosuu'=>3、'nedan'=>300となるようにするには、どうすればよいのでしょうか?

#-- %yaoya の作成
for my $i( 0 .. $#yaoya_array ){
if( $yaoya_array[$i][1] ne "" ){
%yaoya = ( $yaoya_array[0] => {'kosuu' => $yaoya_array[$i][1]} );
}
if( $yaoya_array[$i][2] ne "" ){
%yaoya = ( $yaoya_array[0] => {'nedan' => $yaoya_array[$i][2]} );
}
}

A 回答 (1件)

動作確認済み



use Data::Dumper;

#--- $yaoya_array の中身
$yaoya_array[0][0] = 'みかん';
$yaoya_array[0][1] = 3;
$yaoya_array[0][2] = '';
$yaoya_array[1][0] = 'みかん';
$yaoya_array[1][1] = '';
$yaoya_array[1][2] = 300;

#-- %yaoya の作成
for my $i( 0 .. $#yaoya_array ){
if( $yaoya_array[$i][1] ne "" ){
$yaoya{$yaoya_array[$i][0]}->{'kosuu'} = $yaoya_array[$i][1];
}
if( $yaoya_array[$i][2] ne "" ){
$yaoya{$yaoya_array[$i][0]}->{'nedan'} = $yaoya_array[$i][2];
}
}
#%yaoya = ('みかん' => {'個数' => 3, '値段' =>300});
print Dumper(\%yaoya);
    • good
    • 0
この回答へのお礼

早速のご回答、どうもありがとうございました。
教えていただいた通りで、うまく動きました!

お礼日時:2007/03/12 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!