Nick Brown wrote:
> 2009/7/16 John W. Krahn <jwkr...@shaw.ca>:
>> Nick Brown wrote:
>>> On Jul 15, 11:15 am, jwkr...@shaw.ca (John W. Krahn) wrote:
>>>> Nick Brown wrote:
>>>>> I'm trying to use Finance::OFX::Response to use a ofx statement I've
>>>>> it downloaded from by bank website.
>>>>> http://search.cpan.org/~bfoz/p5-Finance-OFX-20080303/lib/Finance/OFX/...
>>>>> However there I'm getting the following perl compilation error:
>>>>> Type of arg 1 to each must be hash (not subroutine entry) at
>>>>> download_statements.pl line 67, near "->ofx ) "
>>>>> for the below code:
>>>>> $response = $mech->get($download_url . $count);
>>>>>   if (!$response->is_success) {
>>>>>       die 'Failed to load statements URL';
>>>>>   }
>>>>>   $response = $mech->submit_form(form_name => $download_form_name,
>>>>> button => \
>>>>> 'btnDownload');
>>>>>   if (!$response->is_success) {
>>>>>       die 'Failed to get Statement Download';
>>>>>   }
>>>>>   #print $mech->content();
>>>>>   my $ofx_response =
>>>>> Finance::OFX::Response->from_http_response($response);
>>>>>   while( my ($k, $v) = each $ofx_response->ofx ) {
>>>>>       print "key: $k, value: $v.\n";
>>>>>   }
>>>>> Can you suggest what is wrong the while loop I'm trying to use to
>>>>> print the hash tree of the OFX?
>>>> values(), keys() and each() require that their first argument must be a
>>>> hash so if $ofx_response->ofx returns a reference to a hash then you
>>>> have to dereference it:
>>>>
>>>>    while( my ($k, $v) = each %{ $ofx_response->ofx } ) {
>>>>        print "key: $k, value: $v.\n";
>>>>    }
>>> Thanks, I've added the deference to the hash and it now compiles and
>>> executes.
>>> However I'm now getting a different run time error:
>>>
>>> Odd number of elements in hash assignment at
>>> /usr/lib/perl5/vendor_perl/5.10.0/Finance/OFX/Parse.pm line 105, <>
>>> line 1.
>>> Use of uninitialized value $header{"OFXHEADER"} in numeric eq (==) at
>>> /usr/lib/perl5/vendor_perl/5.10.0/Finance/OFX/Parse.pm line 107, <>
>>> line 1.
>>> Can't use an undefined value as a HASH reference at
>>> download_statements.pl line 67, <> line 1.
>>>
>>> Do you have any suggestions to the cause of the this error? What
>>> causing the undefine value as a HASH reference?
>> Your best bet is to find out exactly what $ofx_response->ofx is returning.
>>  Try something like:
>>
>> use Data::Dumper;
>>
>> print Dumper $ofx_response->ofx;
> 
> looks like its returning nothing!
> 
> Odd number of elements in hash assignment at
> /usr/lib/perl5/vendor_perl/5.10.0/Finance/OFX/Parse.pm line 105, <>
> line 1.
> Use of uninitialized value $header{"OFXHEADER"} in numeric eq (==) at
> /usr/lib/perl5/vendor_perl/5.10.0/Finance/OFX/Parse.pm line 107, <>
> line 1.
> $VAR1 = undef;

Take a step back, and:

my @data = \($response, $ofx_response);
print Dumper \...@data;

If you still get nothing, you'll have to move up further in the program
until you find out exactly where things are not being assigned to properly.

To get a better idea of what is happening live-time, put a line like the
following just before the variable assignments that appears to be broken:

$DB::single=2;

Then call your program like this:

% perl -d program

You'll be dropped into the debugger. Use 'w' to "watch" certain
variables for changes. Use 'c' to jump to the breakpoint we added into
the program code (via $DB::simple=2), and use 's' to "single step" each
line. Here is an example:

The problem:

Odd number of elements in hash assignment at tests/ref.pl line 8.

The program:

#!/usr/bin/perl

use warnings;
use strict;

print "...Start\n";

$DB::single = 2; # the debugger run the program up until this point
                 # if I hit 'c' once

my %hash   = ( this => 'that', these => 'those', me => );
my @array = qw ( one two three );
my @data = \( %hash, @array);
__END__


% perl -d tests/ref.pl

  # the line you see on the screen is the one to be executed NEXT

  DB<1> w %hash
  DB<2> c
main::(tests/ref.pl:10):        my %hash   = ( this => 'that', these =>
'those', me => );

  DB<2> s       # single step the %hash assignment

Odd number of elements in hash assignment at tests/ref.pl line 10.
 at tests/ref.pl line 10
Watchpoint 0:   %hash changed:
    old value:  ''
    new value:  'these', 'those', 'me', '', 'this', 'that'

###                                     ^^^

There is the empty assignment that is completely throwing off the hash.
In your case, you may have to move the breakpoint(s) around a bit, and
"watch" different variables until you sort out where the faulty
assignment is being attempted.

Hope this helps, even a little bit...

Steve








  DB<1> w %hash
  DB<2> w @array

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to