В Втр, 14/04/2009 в 15:48 +0300, Yuri Pac пишет: > 2009/4/14 Alexander Q <[email protected]>: > > use strict; > > use warnings; > > use Data::Dumper; > > > > for(1..10) { > > my $t = 'abcd' if 0; > > print Dumper $t; > > $t = 'def'; > > } > > > > В Втр, 14/04/2009 в 16:39 +0400, Eugene Kosov пишет: > >> Где фокус? > >> Замени 'undef' на что-нить другое, чтоб не смущало. > > > > Пожалуйста. > > > > Фокус в том, что > > 1) my $t = 'abcd' if 0; НЕ выполняет всю строку (начиная с my). Тогда > > use strict должен бы ругнуться на $t='def';, но он молчит > > 2) my $t = 'abcd' if 0; выполняет my $t, но не выполняет присваивание > > ='abcd'. Тогда должно бы дампиться $VAR1 = undef; > > > > А оно работает как-то по-другому, непонятно для меня. > > > 1. Такое впечатление что оно сохраняет значение $t между запусками цикла. > 2. IMHO > my $bla = somecoolcode() if (something); > лучше всетаки писать в два этапа > my $bla = undef; > $bla = somecoolcode() if (something); > > По крайней мере не вызывает вопросов.
Факт, оно ещё и работает как надо. Можно даже не my $bla=undef; а просто my $bla; но фокус мне понравился :) ИМХО, тут strict.pm должен сказать "Низя!" -- With best regards, Alexander Q mailto:[email protected] -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
