title: What's the difference in delayed evaluation of code in subroutines for Perl's 5.8 vs. 5.10 and 5.12?
body: <p>This bit of code behaves differently under Perl 5.8 than it does under Perl 5.12:</p>
  
  <pre><code>my $badcode = sub { 1 / 0 };
  print "Made it past the bad code.\n";
  </code></pre>
  
  <p>When I run it under 5.8, I get an error even though I never execute the division:</p>
  
  <pre>[brock@chase tmp]$ /usr/bin/perl -v  
  
  This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
  
  [brock@chase tmp]$ /usr/bin/perl badcode.pl  
  Illegal division by zero at badcode.pl line 1.
  
  [brock@chase tmp]$ /usr/local/bin/perl -v  
  
  This is perl 5, version 12, subversion 0 (v5.12.0) built for i686-linux  
  
  [brock@chase tmp]$ /usr/local/bin/perl badcode.pl  
  Made it past the bad code.</pre>
  
  <p>Under perl 5.10.1, it behaves as it does under 5.12:</p>
  
  <pre>brock@laptop:/var/tmp$ perl -v
  
  This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi
  
  brock@laptop:/var/tmp$ perl badcode.pl  
  Made it past the bad code.</pre>
  
  <p>I get the same results with a named subroutine, e.g.</p>
  
  <pre><code>sub badcode { 1 / 0 }
  </code></pre>
  
  <p>I don't see anything about this in the perl5100delta pod. Is this an undocumented change? A unintended side effect of some other change? (For the record, I think 5.10 and 5.12 are doing the Right Thing.)</p>