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: > >>Perrin Harkins wrote: > >>> my $vote = $foo if ($bar); # <--- bad! > >>> > >>What's wrong with that? I find it a lot more readable than > >> > >>my $vote; > >>if ($bar) { > >> $vote = $foo; > >>} > > > >It doesn't work this way, but suppose you wrote this: > > > >if ($bar) { > > my $vote = $foo > >} > > > >Now see why it's wrong? The way you wrote it is kind of ambiguous for > >the way we think of postfix operators. If you want something one line, > >how about this: > > > >my $vote = $foo ? $bar : undef; > > 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 $ However in 5.10 you -will- get a warning using this construct since it almost always indicates buggy code; the number of people who actually -need- a static rather than just a lexically closed-over var is vanishingly small and they can explicitly turn off the behaviour themselves. -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Director Want a managed development or deployment platform? Shadowcat Systems Ltd. Contact mst (at) shadowcatsystems.co.uk for a quote http://chainsawblues.vox.com/ http://www.shadowcatsystems.co.uk/ _______________________________________________ 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/