in reply to Problem with tie (hash) and dbi?

Can't use an undefined value as a HASH reference at ./x line 46.

I suspect you didn't get that error from this example as there aren't even 46 lines here. In any case, I'm not sure what you are trying to do, really. This might be your problem though:

%h->{a}->{'foo'}='bar'; print Dumper %h->{a};
You are trying to use %h as a hash reference. You probably meant:
$h{a}->{'foo'} = 'bar'; print Dumper $h{a};

-sauoq
"My two cents aren't worth a dime.";

Replies are listed 'Best First'.
Re: Re: Problem with tie (hash) and dbi?
by smferris (Beadle) on May 30, 2003 at 02:22 UTC

    Ooops.. Yeah.. I further narrowed down the code by removing the STORE method as it's not used in this particular scenario.. so the line number was wrong.. However, I believe the syntax %h->{a} is (from what I can make of it) equivelent to $h{a}.. IMO, It's just syntactically clearer.

    The results are still the same.. $h{a} vs. %h->{a}

    I realize now that I left out some detail.. Doh.. This hash will be tied to rows in a single table.. where the key is a set rows, and the value is a hashref of the key/value pairs. EG: the table structure looks like:

    class varchar,
    key varchar,
    value varchar

    Thus, $h{class}->{key}='value'

    The tied hash is readonly.. there's another mechanism to update them permenantly.. this object will only be able to change them temporarily via command line arguments.

    Hope that helps explain my intentions. Thanks for the response

    SMF 8)

      However, I believe the syntax %h->{a} is (from what I can make of it) equivelent to $h{a}.. IMO, It's just syntactically clearer.

      I'll grant you that it works, but you'll be hard-pressed to find many experienced Perl coders to agree with your assessment that it is "syntactically clearer." It... well... it just isn't. Besides that, it's deprecated in 5.8 so you would do yourself a favor by starting to avoid it now.

      $ perl -Mstrict -wle 'my %h=qw(foo bar); print %h->{foo}' Using a hash as a reference is deprecated at -e line 1. bar

      -sauoq
      "My two cents aren't worth a dime.";