[Moscow.pm] Странности депарсинга given/when
Andrew Shitov
andy на shitov.ru
Ср Июн 3 04:15:56 PDT 2009
Вот такая программа с использованием given:
~$ cat given.pl
use Modern::Perl;
my $x = 2.3;
given($x) {
when(int) {say "[$_]int"};
default {say "[$_]default"}
}
Работает, как интуитивно и ожидается:
~$ perl given.pl
[2.3]default
Смотрим на Deparse:
~$ perl -MO=Deparse given.pl
use Modern::Perl;
use warnings;
use strict 'refs';
BEGIN {
$^H{'feature_say'} = q(1);
$^H{'feature_state'} = q(1);
$^H{'feature_switch'} = q(1);
}
my $x = 2.3;
given ($x) {
when ($_) {
say "[$_]int";
}
default {
say "[$_]default";
}
}
given.pl syntax OK
Внимание привлекает, что when (int) превратилось в when ($_).
Теперь другая программа, где вместо when (int) записано when ($_):
~$ cat given.pl
use Modern::Perl;
my $x = 2.3;
given($x) {
when($_) {say "[$_]int"};
default {say "[$_]default"}
}
Работает тоже интуитивно и правильно:
~$ perl given.pl
[2.3]int
Но Deparse выдает тот же код с when ($_).
~$ perl -MO=Deparse given.pl
use Modern::Perl;
use warnings;
use strict 'refs';
BEGIN {
$^H{'feature_say'} = q(1);
$^H{'feature_state'} = q(1);
$^H{'feature_switch'} = q(1);
}
my $x = 2.3;
given ($x) {
when ($_) {
say "[$_]int";
}
default {
say "[$_]default";
}
}
given.pl syntax OK
Как так?
--
Andrew Shitov
______________________________________________________________________
andy на shitov.ru | http://shitov.ru
Подробная информация о списке рассылки Moscow-pm