On Wed, Dec 01, 2010 at 07:38:30PM +0100, Dr.Ruud wrote: > 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. You're proposing a sub of the form 'sub {$x = shift;}' should be a compile error? AbigailThread Previous | Thread Next