[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