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" <[email protected]>:
Отличная идея! Спасибо!
On Apr 19, 2017 10:19, "KES" <[email protected]
<mailto:[email protected]>> 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
[email protected] <mailto:[email protected]>
http://mail.pm.org/mailman/listinfo/kiev-pm
<http://mail.pm.org/mailman/listinfo/kiev-pm>
,
_______________________________________________
Kiev-pm mailing list
[email protected] <mailto:[email protected]>
http://mail.pm.org/mailman/listinfo/kiev-pm
_______________________________________________
Kiev-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/kiev-pm
_______________________________________________
Kiev-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/kiev-pm