On 7/13/07, Matt Lawrence <[EMAIL PROTECTED]> wrote:
Matt S Trout wrote:
> On Fri, Jul 13, 2007 at 05:31:53PM +0100, Matt Lawrence wrote:
>
>> stephen joseph butler wrote:
>>
>>> On 7/13/07, Matt Lawrence <[EMAIL PROTECTED]> wrote:
>>>
>> I can't replicate this behaviour. As far as I can tell, the postfix if
>> is identical to the block if I wrote above.
>>
>>
>> perl -Mstrict -wle 'my $foo = 1 if 0; print defined $foo ? $foo : "undef"'
>> undef
>>
>>
>> Has the bug been fixed?
>>
>
> No, because people use the "if 0" construct as a way to create a static.
>
> cain$ re.pl
> $ sub foo { my $foo if 0; $foo++; }
> $ foo();
> 0                                                                             
  $ foo();
> 1                                                                             
  $ foo();
> 2                                                                             
  $
>

Eurgh. I've never seen that before, but it's horrible.

Matt




As anecdotal evidence to its insidious behavior, I've personally been
involved in a 5 man debugging effort that took 13 days (not full days,
but probably an average of 3-4 hours a day * 5 people * 13 days) to
finally find the bug.  Which was simply "my $foo = $bar if $baz;"

The reason why it was so hard to track down was because ot he
wonderful undefined behavior.

Ahh, good times.  Never use that construct, for it will hurt you.  At
least we were all on billable hours ;)

-Jay

--
J. Shirley :: [EMAIL PROTECTED] :: Killing two stones with one bird...
http://www.toeat.com

_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/

Reply via email to