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