[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