The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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)

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.