<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Hello together,</p>
    <p>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.<br>
      Is<br>
          pragma 'soft_call';<br>
      already working?<br>
    </p>
    <p>Regards Steffen.<br>
    </p>
    <br>
    <div class="moz-cite-prefix">Am 19.04.2017 um 09:56 schrieb KES:<br>
    </div>
    <blockquote cite="mid:2930551492588619@web23m.yandex.ru" type="cite">
      <div>завсегдатаи подсказали:
        <a class="moz-txt-link-freetext" href="http://www.perlmonks.org/?node_id=973015">http://www.perlmonks.org/?node_id=973015</a></div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>19.04.2017, 10:23, "Konstantin Cherednichenko"
        <a class="moz-txt-link-rfc2396E" href="mailto:dshadowukraine@gmail.com"><dshadowukraine@gmail.com></a>:</div>
      <blockquote type="cite">
        <div dir="auto">Отличная идея! Спасибо!</div>
        <div><br>
          <div>On Apr 19, 2017 10:19, "KES" <<a
              moz-do-not-send="true" href="mailto:kes-kes@yandex.ru">kes-kes@yandex.ru</a>>
            wrote:<br type="attribution">
            <blockquote style="margin:0 0 0 0.8ex;border-left:1px #ccc
              solid;padding-left:1ex;">Привет.<br>
              <br>
              А у меня вот давно витает идея "мягкого вызова".<br>
              Даже ещё когда писал на ассемблере всегда раздражали
              исключения при `CALL 0`<br>
              <br>
              ну вот снова вернулся к этой теме.<br>
              <br>
              1. Что не так?<br>
              Очень часто приходится писать следующий код:<br>
              my $x; my $y;<br>
              if( ($x =  $obj->method)   &&  $y = 
              $x->another_method ) {<br>
                   $y = ...;<br>
              }<br>
              <br>
              Пример из жизни:<br>
              <br>
              if( $db->query( ... )->hash->{ value } ) { ... }<br>
              if( $db->resultset( 'table' )->search( ...
              )->related_resultset( 'table2' ) { ... }<br>
              <br>
              <br>
              тут если запрос вернул пустой результат, то код упадёт.<br>
              <br>
              А если использовать оператор мягкого вызова, то можно
              будет не бояться исключений и код станет проще:<br>
              <br>
              use pragma 'soft_call';<br>
              if( my $x =  $obj->method~>another_method ) { ... }<br>
              if( $db->query( ... )~>hash->{ value } ) { ... }<br>
              if( $db->resultset( 'table' )->search( ...
              )~>related_resultset( 'table2' ) { ... }<br>
              <br>
              И вроде как всё выразительно получается.<br>
              <br>
              Даже сама реализация прагмы в десяток строк:<br>
              1. делаем плагин для keyword, Наподобие 
              Syntax::Keyword::Try<br>
              2. цепляемся на <a moz-do-not-send="true"
                href="http://perldoc.perl.org/perlguts.html#Pluggable-runops"
                rel="noreferrer" target="_blank">http://perldoc.perl.org/<wbr>perlguts.html#Pluggable-runops</a><br>
              3. Псевдокод:<br>
              sub soft_call_operator {<br>
                  my( $left_operand, $right_operand ) =  @_;<br>
              <br>
                  return undef    if !defined $left_operand;<br>
              <br>
                  '->'( $left_operand, $right_operand ); # делаем
              обычную обработку вызова функции<br>
              }<br>
              <br>
              <br>
              Комментарии wellcome<br>
              ______________________________<wbr>_________________<br>
              Kiev-pm mailing list<br>
              <a moz-do-not-send="true" href="mailto:Kiev-pm@pm.org">Kiev-pm@pm.org</a><br>
              <a moz-do-not-send="true"
                href="http://mail.pm.org/mailman/listinfo/kiev-pm"
                rel="noreferrer" target="_blank">http://mail.pm.org/mailman/<wbr>listinfo/kiev-pm</a><br>
            </blockquote>
          </div>
        </div>
        ,
        <p>_______________________________________________<br>
          Kiev-pm mailing list<br>
          <a moz-do-not-send="true" href="mailto:Kiev-pm@pm.org">Kiev-pm@pm.org</a><br>
          <a moz-do-not-send="true"
            href="http://mail.pm.org/mailman/listinfo/kiev-pm">http://mail.pm.org/mailman/listinfo/kiev-pm</a><br>
        </p>
      </blockquote>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Kiev-pm mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Kiev-pm@pm.org">Kiev-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/kiev-pm">http://mail.pm.org/mailman/listinfo/kiev-pm</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>