[Moscow.pm] Волшебный баг с AnyEvent::postpone

Konstantin S. Uvarin khedin на gmail.com
Сб Сен 14 02:17:49 PDT 2013


On Fri, 2013-09-13 at 21:30 +0400, Ilya Chesnokov wrote:
> 13 сентября 2013 г., 19:48 пользователь Konstantin S. Uvarin
> <khedin at gmail.com> написал:
>         когда пытается
>         выполнить "результат code"->(). 
> 
> 
> Это вовсе не code->() - это обычный hashref, который потом и
> передается в качестве аргумента (как это видно из второго примера).

Попробуем более другие примеры:

bash$ perl -wle 'sub foo; foo{ print "xx" }; sub foo { print shift }'
xx
Odd number of elements in anonymous hash at -e line 1.
HASH(0x9c167ec)

Явно хеш

[lodin-pad] [13:05:01] lodin ~/prg/AnyEvent-7.02
bash$ perl -wle 'foo{ print "xx" }; sub foo { print shift }'
xx
Can't call method "foo" without a package or object reference at -e line
1.

Где ворнинг про Odd number of elements? 

Теперь с ";": 

bash$ perl -wle 'sub foo; foo{ print "xx"; }; sub foo { print shift }'
syntax error at -e line 1, near "; }"
Execution of -e aborted due to compilation errors.

Опять хеш (иначе ; не было бы ошибкой)

[lodin-pad] [13:07:44] lodin ~/prg/AnyEvent-7.02
bash$ perl -wle 'foo{ print "xx"; }; sub foo { print shift }'
xx
Can't call method "foo" without a package or object reference at -e line
1.

; не ошибка, падаем в другом месте => не хеш

This is perl 5, version 14, subversion 2 (v5.14.2) built for
i686-linux-gnu-thread-multi-64int

На 5.18 то же самое (спасибо perlbrew)

И вот совсем жесть. 

bash$ perl -we 'require URI::Escape; my $x =
uri_escape{ "URI::Escape" }; print $x;'

URI%3A%3AEscape

> 
> 
>         Но пользователь об этом не факт что
>         узнает.).
>         
>           Вообще я был бы рад, если бы из нижеприведённого корректным
>         кодом был
>         бы только вариант с прототипом.
>         
>         perl -wle 'foo{ 3 => print "xx" }; sub foo { print shift }'
>         perl -wle 'sub foo; foo{ 3 => print "xx" }; sub foo { print
>         shift }'
>         perl -wle 'sub foo(&); foo{ 3 => print "xx" }; sub foo (&)
>         { print
>         shift }'






Подробная информация о списке рассылки Moscow-pm