[Moscow.pm] smartmatch: планы

Vladimir Lettiev thecrux на gmail.com
Вт Сен 17 00:08:13 PDT 2013


On Tue, Sep 17, 2013 at 10:42:47AM +0400, Ivan Petrov wrote:
> с Perl 5.10 мы применяем в своих проектах ~~ для случаев когда нужно
> сравнить два скаляра один из которых может быть undef, а так же там
> где надо проверить входит ли скаляр в лист.
> 
> с 5.18 ~~ ушла в experimental и стало усиленно ругаться.
> 
> в perldelta просто написано о том что теперь експериментал, но не
> написаны планы относительно него: что будет в 5.20, 5.22?
> 
> есть у кого какая-то ссылка на обсуждение или документ относительно
> планов на ~~. а то ходить по тысячам файлов и выпиливать все места
> где написано `last if $var ~~ @list;` крайне геморройно.
> но на 5.18 смигрировать тоже необходимо.

Вот предложение Ricardo Signes по новому smartmatch:

http://www.nntp.perl.org/group/perl.perl5.porters/2012/08/msg190658.html

там дальше огромный тред по обсуждению деталей, но примерно всё вращается
вокруг плана

    ## The New ~~ Operator

    $a      $b                  Meaning
    ======= =======             ======================
    Any     undef               ! defined $a
    Any     ~~-overloaded       ~~ overloading is used
    ~~-ol   Any                 ~~ overloading is used (reversed)
    Any     CodeRef, &{}-ol     $b->($a)
    Any     Regexp, qr-ol       $a =~ $b
    Any     Simple              $a eq $b
    Any     Any                 fatal

Для вашего случая предлагается прикрутить junctions:

    if ( $var ~~ any( @list ) ) 

    if ( $var ~~ all( @list_of_regexp  ) )

-- 
Vladimir Lettiev aka crux ✉ theCrux на gmail.com


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