On Thu, 21 Jun 2007 22:33:03 +0100, Tim Bunce wrote: > On Thu, Jun 21, 2007 at 06:47:11PM +0200, Rafael Garcia-Suarez wrote: >> On 21/06/07, Steve Hay <[EMAIL PROTECTED]> wrote: >> >I remember lots of discussion a while ago about constructions like "my >> >$x = 1 if $y;". I don't remember what the conclusion of it all was, >> >except that it's probably best avoided. Is that right? >> >> Yes, that's right, because that could bypass initialisation of $x if >> $y is false, leaving the previous value in it, like in state vars. > > I thought that issue only related to a "compile-time constant false" > (such as the one in your example) and not to a runtime expression that > happened to be false sometimes. > > Looking at it another way, are you saying that (ignoring closures) > subroutine scoped lexicals are not cleared when the subroutine exits, > but persist (consuming memory) until the subroutine is reentered?
$ ./perl -wle '$q = shift; sub foo { my $x if $q; print $x // $]; \ $x = 42 } foo; $q++; foo' 0 5.009005 42 It looks like it, no? -- Peter Scott