[Kiev-pm] Soft call operator (Оператор мягкого вызова): ~>

Steffen Winkler steffen at steffen-winkler.de
Wed Apr 19 01:20:02 PDT 2017


Hello together,

This days I moved Try::Chain from our project to CPAN. The problem was, 
fetching database results, sometimes mapped in hashes or arrays. Then 
long chains is the result and this chains can break 1 or more times.
Is
     pragma 'soft_call';
already working?

Regards Steffen.


Am 19.04.2017 um 09:56 schrieb KES:
> завсегдатаи подсказали: http://www.perlmonks.org/?node_id=973015
>
>
> 19.04.2017, 10:23, "Konstantin Cherednichenko" <dshadowukraine at gmail.com>:
>> Отличная идея! Спасибо!
>>
>> On Apr 19, 2017 10:19, "KES" <kes-kes at yandex.ru 
>> <mailto:kes-kes at yandex.ru>> wrote:
>>
>>     Привет.
>>
>>     А у меня вот давно витает идея "мягкого вызова".
>>     Даже ещё когда писал на ассемблере всегда раздражали исключения
>>     при `CALL 0`
>>
>>     ну вот снова вернулся к этой теме.
>>
>>     1. Что не так?
>>     Очень часто приходится писать следующий код:
>>     my $x; my $y;
>>     if( ($x =  $obj->method)   &&  $y = $x->another_method ) {
>>          $y = ...;
>>     }
>>
>>     Пример из жизни:
>>
>>     if( $db->query( ... )->hash->{ value } ) { ... }
>>     if( $db->resultset( 'table' )->search( ... )->related_resultset(
>>     'table2' ) { ... }
>>
>>
>>     тут если запрос вернул пустой результат, то код упадёт.
>>
>>     А если использовать оператор мягкого вызова, то можно будет не
>>     бояться исключений и код станет проще:
>>
>>     use pragma 'soft_call';
>>     if( my $x =  $obj->method~>another_method ) { ... }
>>     if( $db->query( ... )~>hash->{ value } ) { ... }
>>     if( $db->resultset( 'table' )->search( ... )~>related_resultset(
>>     'table2' ) { ... }
>>
>>     И вроде как всё выразительно получается.
>>
>>     Даже сама реализация прагмы в десяток строк:
>>     1. делаем плагин для keyword, Наподобие Syntax::Keyword::Try
>>     2. цепляемся на
>>     http://perldoc.perl.org/perlguts.html#Pluggable-runops
>>     <http://perldoc.perl.org/perlguts.html#Pluggable-runops>
>>     3. Псевдокод:
>>     sub soft_call_operator {
>>         my( $left_operand, $right_operand ) =  @_;
>>
>>         return undef    if !defined $left_operand;
>>
>>         '->'( $left_operand, $right_operand ); # делаем обычную
>>     обработку вызова функции
>>     }
>>
>>
>>     Комментарии wellcome
>>     _______________________________________________
>>     Kiev-pm mailing list
>>     Kiev-pm at pm.org <mailto:Kiev-pm at pm.org>
>>     http://mail.pm.org/mailman/listinfo/kiev-pm
>>     <http://mail.pm.org/mailman/listinfo/kiev-pm>
>>
>> ,
>>
>> _______________________________________________
>> Kiev-pm mailing list
>> Kiev-pm at pm.org <mailto:Kiev-pm at pm.org>
>> http://mail.pm.org/mailman/listinfo/kiev-pm
>>
>
>
> _______________________________________________
> Kiev-pm mailing list
> Kiev-pm at pm.org
> http://mail.pm.org/mailman/listinfo/kiev-pm

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/kiev-pm/attachments/20170419/23b6a74b/attachment.html>


More information about the Kiev-pm mailing list