Thanks. That got me what I was after. What if one of elements in inner has was a list of hashes, how would I access an element of this has.
Something like: [ { account_id => 123456 transactions => [ { date => 1-1-1900 amount => 9999 name => 'from FOO' }, { date => 1-2-1900 amount => 8888 name => 'from BAR' } ] } ]; to get the date of the first transaction I tried: print $ofx_data->[0]{tranactions}->[0]{date}; but that fails. How do I access this inner hash? Thanks, Nick 2009/8/7 John Refior <jref...@gmail.com>: > On Thu, Aug 6, 2009 at 3:36 PM, Nick Brown <nickbr...@gmail.com> wrote: >> >> Sorry for the late reply. >> >> I actually switched to using: >> >> use Finance::OFX::Parse::Simple; >> >> http://search.cpan.org/dist/Finance-OFX-Parse-Simple/lib/Finance/OFX/Parse/Simple.pm >> >> and this does appear to parse the data. >> >> my $ofx_parser = Finance::OFX::Parse::Simple->new; >> my $ofx_data = $ofx_parser->parse_scalar($response->content); >> >> print Dumper $ofx_data; >> print ${$ofx_data}[0]->account_id; >> >> The print Dumper line seems to output the OFX data just fine. >> But due to my inexperience at perl the next line to print the >> account_id fails with following error: >> >> Can't call method "account_id" on unblessed reference at >> download_statements.pl line 72, <> line 1. > > > Well I don't really know enough about the context here, but my guess would > be that: > $ofx_data # is a reference to a list of hash references > ${ $ofx_data }[0] # returns the first hash reference > $ofx_data->[0] # returns the first hash reference as well > account_id # is a key to these hashes > Assuming that is true, to get the account_id in the first hash I would > write: > $ofx_data->[0]{account_id}; > The arrow (->) operator is used (at least) two ways in Perl. It can be used > to call a method on a class or instance, like $listObject->sort(); , or it > can be used to dereference and specify a location in the array when used > with an array reference, or to dereference and specify a key-value lookup > when used with a hash reference. After the arrow, a value in [] means it's > an array reference and subscript, and a string in {} means it's a hash > reference and key. So > $ofx_data->[0]->{account_id}; # gets the account id > $ofx_data->[0]{account_id}; # same thing - perl lets you omit the arrow > between multiple subscripts > $ofx_data->[0]{ 'account_id' }; # same thing - perl lets you omit the > quotes in simple key names > Here's an example of how you could loop through and print out all the keys > and values given a list reference to a list of hash references. It prints > out: > $ perl listOfHashes.pl > able to access account_id > Print them all: > account_id: 1002972 > wishful_balance: $1,238,719.28 > fruit: strawberries > vegetable: broccoli > write_on: pad of paper > write_with: pencil > And here's the code: > > #!/usr/bin/perl > > use strict; > use warnings; > > my $moneyHash = { > account_id => 1002972, > wishful_balance => '$1,238,719.28', > }; > > my $foodHash = { > fruit => 'strawberries', > vegetable => 'broccoli', > }; > > my $officeHash = { > write_with => 'pencil', > write_on => 'pad of paper', > }; > > my $listRef = [$moneyHash, $foodHash, $officeHash]; > > # test hash dereference > if ($listRef->[0]{account_id} == 1002972) { > print "able to access account_id\n"; > } > > # print them all > print "\nPrint them all:\n"; > foreach my $hashRef (@$listRef) { > foreach my $key (sort keys %$hashRef) { > print " $key: ", $hashRef->{$key}, "\n"; > } > } > > - John -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/