[Moscow.pm] Фокусы с постфиксным if

Alexander Q qalex на ashmanov.com
Вт Апр 14 05:51:26 PDT 2009


В Втр, 14/04/2009 в 15:48 +0300, Yuri Pac пишет:
> 2009/4/14 Alexander Q <qalex на ashmanov.com>:
> > 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:qalex на ashmanov.com



Подробная информация о списке рассылки Moscow-pm