[Moscow.pm] Странности и неожиданности Perl

Ivan B. Serezhkin ivan на serezhkin.com
Вс Мар 2 03:34:22 PST 2008


Привет.
Это не матчи - это кувэ так работает, это не массив - это конструктор 
массива.
оснавная фишка в том, что perl -e 'print scalar(qw(3 5 7));'

Andrew Shitov wrote:
> Несколько неожиданно про контексты:
>
> perl510 -E"say 1 if qw(3 4) ~~ 3"           ничего не выводит
>
> perl510 -E"@a = qw(3 4); say 1 if @a ~~ 3"  печатает единицу
>
> Соответственно, qw(3 4) ~~ 2 (длина массива) -- тоже false,
> а qw(3 4) ~~ 4 -- true.
>
>
> Еще неожиданнее, если вместо qw(3 4) написать (3, 4):
>
> perl510 -E"say 1 if (3, 4) ~~ 2"      false
> perl510 -E"say 1 if (3, 4) ~~ 3"      false
> perl510 -E"say 1 if (3, 4) ~~ 4"      true
>
> perl510 -E"say 1 if [3, 4] ~~ 2"      false
> perl510 -E"say 1 if [3, 4] ~~ 3"      true
> perl510 -E"say 1 if [3, 4] ~~ 4"      true
>
>
> Неожиданно, но верно :-)
>
> Binary "," is the comma operator. In scalar context it evaluates
> its left argument, throws that value away, then evaluates its
> right argument and returns that value. This is just like C's
> comma operator.
>
> In list context, it's just the list argument separator, and
> inserts both its arguments into the list. These arguments are
> also evaluated from left to right.
>
>
> --
> Андрей Шитов
> ______________________________________________________________________
> andy на shitov.ru | http://www.shitov.ru
>
> ______________________________________________________________________
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm


-- 
Ivan B. Serezhkin



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