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

Orlovsky Alexander nordicdyno на yandex.ru
Вт Апр 14 06:09:54 PDT 2009


Вот как этот код интерпертируется парзером perl. (моим: v5.8.8 built for i386-linux-thread-multi)

# perl -MO=Deparse

use strict;
use warnings;
use Data::Dumper;

for(1..10) {
my $t = 'abcd' if 0;
print Dumper $t;
$t = 'def';
}

#---------------------------------------

^D
use Data::Dumper;
use warnings;
use strict 'refs';
foreach $_ (1 .. 10) {
    '???';
    print Dumper($t);
    $t = 'def';
}
- syntax OK

Почему то "use strict;" превратилось в "use strict 'refs';"

Искусственный интеллект? =)


14.04.09, 16:44, "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;
> А оно работает как-то по-другому, непонятно для меня.
> -- 
> With best regards,
>   Alexander Q                         mailto:qalex на ashmanov.com
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org


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