On Mon, Apr 20, 2009 at 11:21, Dermot <paik...@googlemail.com> wrote:
> Hi,
>
> I am trying to initiate a hash once when the package is loaded (via
> modperl). I don't want to make repeated DB queries for this data so
> I'd like to populate the hash when my daemon starts and not again
> until it's reloaded/started. I thought that I could say somethign
> like, "if %defaults, return %defaults else populate %defaults and
> return".
>
> Here's the error I am getting:
>
> Can't modify private hash in logical or assignment (||=) at
> /export/web/lib/Foo.pm line 28, near "}
snip

You should have gone with your first instinct:

sub getDefaults {

    return if %defaults;


    my $sql = q{SELECT * from bar};
    my $sth = $dbh->prepare($sql);
    $sth->execute;
    while (my $row = fetchrow_hashref) {
        $defaults{$row->{id}} = $row->{'description'};
    }
    return
}

You might also want to look into the Singleton pattern[1].

1. http://en.wikipedia.org/wiki/Singleton_pattern

-- 
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to