Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

datastructures and out of memory errors

by busunsl (Vicar)
on Mar 11, 2002 at 12:21 UTC ( [id://150866]=perlquestion: print w/replies, xml ) Need Help??

busunsl has asked for the wisdom of the Perl Monks concerning the following question:

I was playing with XML::Simple recently, a nice module when you have small XML files. Read here for a review.

One of the options of XML::Simple is to insert an array on each hierarchy level, so it can distinguish between attributes and elements.

My first use was without that extra level, so I could access stuff just by dereferencing hashes:

$template->{level1}->{level2}->{element1} = '1234';
It worked well until I realized, that I needed that extra level. The structure changed from something like:
$template = { 'level1' => { 'level2' => { 'element1' => '1234' } } };
to
$template = { 'level1' => [ { 'level2' => [ { 'element1' => '1234' } ] } ] };
But I didn't change my program. :-(

print $template->{level1}->{level2}->{element1};

just printed nothing and

$template->{level1}->{level2}->{element1} = '1234';

gave me that wonderful error message, telling me just nothing about what happend:

Out of memory!

So when I access elements of a datastructure in the wrong way I just get undef, but when I assign to it in the wrong way Perl runs out of memory.

I think Perl should report an error, as it does when you try to use a normal hash reference as an array reference.

Is this behaviour documented somewhere?
Is it a bug?

Replies are listed 'Best First'.
Re: datastructures and out of memory errors
by strat (Canon) on Mar 11, 2002 at 13:31 UTC
    I've had a similar problem, it just was a hash of hashes of arrays (about LDIF-Format) unter Perl5.6 (under Win2k, Linux and Solaris).
    I decided to use Perl5.005_03, which gave me a better performance, too

    Version:           Runtime  Memory-Usage
    5.0005_03 (AS522)  ~20 min  ~480 MB
    5.61      (AS631)  ~90 min  ~700 MB
    
    When I've got more time, I'll try to extract a simple script with the essential logic and commit a bug-report... because such a difference (especially in runtime) can't be true...

    Best regards,
    perl -le "s==*F=e=>y~\*martinF~stronat~=>s~[^\w]~~g=>chop,print"

    PS: somebody has submitted a similar bug with 5.6.1 to activestate with hashes or hashes or the like...

    PS2: I asked Microsoft some months ago when there came an Out-Of-Memory-Error while using about 1.2 GB RAM under Win2k, and they told me something about Memory-Fragmentation, and you could prevent it, if you preallocate the RAM (in Perl with: $#list = 10000; or the like).

Re: datastructures and out of memory errors
by blakem (Monsignor) on Mar 11, 2002 at 20:44 UTC
      Yes, pseudohashes might be an explanation.
      I didn't think of that.

      I never liked them and that is another argument against that misfeature.

      Thanks!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://150866]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2024-04-16 09:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found