On 2010-12-01 00:24, Abigail wrote: > On Tue, Nov 30, 2010 at 10:34:36PM +0100, Dr.Ruud wrote: >> On 2010-11-29 10:22, Dave Mitchell wrote: >>> On Sun, Nov 28, 2010 at 05:16:28PM -0800, Father Chrysostomos wrote: >>>> I know this is what constant.pm used to use, but it causes a bug: >>> >>> What do you think is the bug? It seems to be behaving the way I expect. >>> >>>> $ perl -MO=Deparse -e' BEGIN{my $x = 5; *foo = sub(){$x}; $x=6} print foo' >>>> sub BEGIN { >>>> my $x = 5; >>>> *foo = sub () { >>>> $x; >>>> } >>>> ; >>>> $x = 6; >>>> } >>>> print 5; >> >> The compiler should patch the constsub at the '$x = 6' line. > > If the compiler can detect that afterwards $x won't change - but you > need to be able to solve the halting problem to do that in general. > For instance, > > BEGIN { > my $x = 5; > *foo = sub () {$x}; > *bar = sub {$x = shift}; > } > > the compiler could only patch the constsub if it knows bar() won't > be called. And that is not '$x = CONSTANT', so that should then be a compile error. -- RuudThread Previous | Thread Next