NAME

Venus::Role::Catchable - Catchable Role

ABSTRACT

Catchable Role for Perl 5

SYNOPSIS

package Example;

use Venus::Class;

use Venus 'error';

with 'Venus::Role::Tryable';
with 'Venus::Role::Catchable';

sub pass {
  true;
}

sub fail {
  error;
}

package main;

my $example = Example->new;

# my $error = $example->catch('fail');

DESCRIPTION

This package modifies the consuming package and provides methods for trapping errors thrown from dispatched method calls.

METHODS

This package provides the following methods:

catch

catch(string $method, any @args) (any)

The catch method traps any errors raised by executing the dispatched method call and returns the error string or error object. This method can return a list of values in list-context. This method supports dispatching, i.e. providing a method name and arguments whose return value will be acted on by this method.

Since 0.01

catch example 1
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

# bless({...}, "Venus::Error")
catch example 2
package main;

my $example = Example->new;

my $catch = $example->catch('pass');

# undef
catch example 3
package main;

my $example = Example->new;

my ($catch, $result) = $example->catch('pass');

# (undef, 1)
catch example 4
package main;

my $example = Example->new;

my ($catch, $result) = $example->catch('fail');

# (bless({...}, "Venus::Error"), undef)

caught

caught(object $error, string | tuple[string, string] $identity, coderef $block) (any)

The caught method evaluates the value provided and validates its identity and name (if provided) then executes the code block (if provided) returning the result of the callback. If no callback is provided this function returns the exception object on success and undef on failure.

Since 4.15

caught example 1
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

my $result = $example->caught($catch);

# bless(..., 'Venus::Error')
caught example 2
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

my $result = $example->caught($catch, 'Venus::Error');

# bless(..., 'Venus::Error')
caught example 3
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

my $result = $example->caught($catch, 'Venus::Error', sub{
  $example->{caught} = $_;
});

($example, $result)

# (bless(..., 'Example'), bless(..., 'Venus::Error'))
caught example 4
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

$catch->name('on.issue');

my $result = $example->caught($catch, ['Venus::Error', 'on.issue']);

# bless(..., 'Venus::Error')
caught example 5
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

$catch->name('on.issue');

my $result = $example->caught($catch, ['Venus::Error', 'on.issue'], sub{
  $example->{caught} = $_;
});

($example, $result)

# (bless(..., 'Example'), bless(..., 'Venus::Error'))
caught example 6
package main;

my $example = Example->new;

my $catch = $example->catch('fail');

my $result = $example->caught($catch, ['Venus::Error', 'on.issue']);

# undef
caught example 7
package main;

my $example = Example->new;

my $catch;

my $result = $example->caught($catch);

# undef

maybe

maybe(string $method, any @args) (any)

The maybe method traps any errors raised by executing the dispatched method call and returns undefined on error, effectively supressing the error. This method can return a list of values in list-context. This method supports dispatching, i.e. providing a method name and arguments whose return value will be acted on by this method.

Since 2.91

maybe example 1
package main;

my $example = Example->new;

my $maybe = $example->maybe('fail');

# undef
maybe example 2
package main;

my $example = Example->new;

my $maybe = $example->maybe('pass');

# true
maybe example 3
package main;

my $example = Example->new;

my (@maybe) = $example->maybe(sub {1..4});

# (1..4)

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.