in reply to Hash Problem!

It would be much better for the Perl program that generates the data to write it to a database. However, going with what you have been given:

use warnings; use strict; use Data::Dump::Streamer; my $data = <<DATA; 'main_data' => [ { 'LEVEL' => '12', 'CARNUM' => '1', 'REGIS#' => '1233456678987645RD ', 'ACCOUNT' => '6510334', 'YEAR' => '2008' }, { 'AMOUNT' => '200.00' }, { 'LEVEL' => '0', 'CARNUM' => '2', 'REGIS#' => '2234565478345R56T ', 'ACCOUNT' => '6510334', 'YEAR' => '2008' }, { 'AMOUNT' => '0.00' } ], DATA local $\; open my $InFile, '<', \$data; my $str = <$InFile>; close $InFile; no strict "vars"; eval "\%hash = ($data);"; my %accounts; while (@{$hash{main_data}}) { my ($accountInfo, $amount) = splice @{$hash{main_data}}, 0, 2; my $acct = $accountInfo->{ACCOUNT}; my $reg = $accountInfo->{'REGIS#'}; delete @{$accountInfo}{'ACCOUNT', 'REGIS#'}; $accounts{$acct}{$reg} = $accountInfo; $accounts{$acct}{$reg}{AMOUNT} = $amount->{AMOUNT}; } use strict; print "$accounts{6510334}{'1233456678987645RD '}{AMOUNT}";

Prints:

200.00

Perl reduces RSI - it saves typing

Replies are listed 'Best First'.
Re^2: Hash Problem!
by Anonymous Monk on Sep 30, 2008 at 13:51 UTC
    Would be possible to add the amount 'AMOUNT' => '200.00' to the first hash right after the 'LEVEL' => '12', because these values belong to the information above them, and they are separated making things more difficult.
      If I understand the meaning of your question correctly, then the answer is no. It is certainly possible to add anything you want to any of the hashes, but, if you mean by “right after” that there should be some ordering, then you can't achieve that. If you just want it to appear in the same hash, and don't care (as you mustn't) about ordering, then (as moritz pointed out when you asked the same question before) why not just do what you're suggesting and test the result yourself?