[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