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

По крайней мере не вызывает вопросов.
-- 
WBR, Yuri Pac
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить