Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
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 goofing around in the Monastery: (5)
As of 2024-04-19 21:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found