[Moscow.pm] Странности депарсинга given/when
Orlovsky Alexander
nordicdyno на yandex.ru
Ср Июн 10 00:07:43 PDT 2009
удалось разобраться в чем дело?
03.06.09, 15:15, "Andrew Shitov" <andy на shitov.ru>:
> Вот такая программа с использованием 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org
Подробная информация о списке рассылки Moscow-pm