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

Yuri Pac yu.pats на gmail.com
Вт Апр 14 05:48:43 PDT 2009


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);

По крайней мере не вызывает вопросов.
-- 
WBR, Yuri Pac


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