Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^3: Interpreter eval counter out of bounds

by Corion (Patriarch)
on Jan 29, 2011 at 10:33 UTC ( [id://885011]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Interpreter eval counter out of bounds
in thread Interpreter eval counter out of bounds

I'm currently running the following code snippet:

perl -Mstrict -wle "my@r;$|++;while($_++<$ARGV[0]){eval sprintf q{my$s +elf=\%s;push @r,sub{ $self }},$_,$_; if(!($_%100000)){printf qq(%010d +\r),$_;@r=()}}" 1000000000

but I've only reached 479_000_000 iterations so far, doing about 10_000 evaluations per second. If that doesn't turn up any errors, maybe we should work on code that pumps up the counter more quickly to 999_000_000 string evals and then slowly iterates there.

I think what would help was some more information about the nature of the code you're evaluating. Is my code anywhere near, creating closures? Or don't closures come into play with your code at all?

Update: The code has run through (on Strawberry Perl 5.12) without a hitch.

Update: Running the code for somewhat longer actually produces the error on Strawberry 5.12 for me too:

Expect crash1073700000 Expect crashGlobal symbol "$abc" requires explicit package name at (ev +al 1073741769) line 1.

Replies are listed 'Best First'.
Bug recreated, you stopped just before the action
by Jeppe (Monk) on Jan 31, 2011 at 08:45 UTC
    Success! I've recreated the bug!
    #!/opt/perl/bin/perl
    
    use strict;
    use warnings;
    
    my $count = 0;
    
    until ($@) {
      $count++;
      eval 'my $abc = 1; $abc++; ';
      unless ($count % 100000) {
        print $count . $/;
        print q(Expect crash) if $count > 999977609;
      }
    }
    
    print $@;
    
    This produced:
    ....
    1073700000 - Expect crash
    Global symbol "$abc" requires explicit package name at (eval 1073741770) line 1.
    So, there is a limit. This was run on perl 5.12.2, though the crashing system runs perl 5.8.9.

      It's pretty amazing how consistent this is, but that means it'll be easier to identify the bug. Could you please file a bug report using perlbug if you haven't already?

      [ It has since been filed as RT#83364. ]

        We will.
        --
        No matter how great and destructive your problems may seem now, remember, you've probably only seen the tip of them. [1]
Re^4: Interpreter eval counter out of bounds (yafd)
by tye (Sage) on Feb 02, 2011 at 17:27 UTC

    Not enough iterations. After almost 9 hours, got:

    1073741811: Global symbol "$abc" requires explicit package name at (ev +al 1073741811) line 1.

    repeated 5 times for sequential numbers after 1073741811 from:

    #!/usr/bin/perl -w use strict; my $count= 0; my $fail= 0; $|= 1; while( 1 ) { if( 0 == ++$count % 100_000 && -t STDOUT ) { print "\r$count "; } if( ! eval 'my $abc = 1; $abc++; 1' ) { print "\n$count: $@\n"; exit if 5 < ++$fail; } }

    under

    This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi

    - tye        

Log In?
Username:
Password:

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

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

    No recent polls found