[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