удалось разобраться в чем дело?

03.06.09, 15:15, "Andrew Shitov" <[email protected]>:

> Вот такая программа с использованием 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
> ______________________________________________________________________
> [email protected] | http://shitov.ru
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить