GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Venus::Try(3) User Contributed Perl Documentation Venus::Try(3)

Venus::Try - Try Class

Try Class for Perl 5

  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    # try something
    return time;
  });
  $try->catch('Example::Error', sub {
    my ($caught) = @_;
    # caught an error (exception)
    return;
  });
  $try->default(sub {
    my ($caught) = @_;
    # catch the uncaught
    return;
  });
  $try->finally(sub {
    my (@args) = @_;
    # always run after try/catch
    return;
  });
  my @args;
  my $result = $try->result(@args);

This package provides an object-oriented interface for performing complex try/catch operations.

This package has the following attributes:

  invocant(Object)

This attribute is read-only, accepts "(Object)" values, and is optional.

  arguments(ArrayRef)

This attribute is read-only, accepts "(ArrayRef)" values, and is optional.

  on_try(CodeRef)

This attribute is read-write, accepts "(CodeRef)" values, and is optional.

  on_catch(ArrayRef[CodeRef])

This attribute is read-write, accepts "(ArrayRef[CodeRef])" values, is optional, and defaults to "[]".

  on_default(CodeRef)

This attribute is read-write, accepts "(CodeRef)" values, and is optional.

  on_finally(CodeRef)

This attribute is read-write, accepts "(CodeRef)" values, and is optional.

This package inherits behaviors from:

Venus::Kind::Utility

This package provides the following methods:

  any() (Venus::Try)

The any method registers a default "catch" condition that returns whatever value was encoutered on error and returns it as a result.

Since 2.32

any example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    die 'Oops!';
  });
  my $any = $try->any;
  # bless({ on_catch => ... }, "Venus::Try")
    
any example 2
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    die $try;
  });
  my $any = $try->any;
  # bless({ on_catch => ... }, "Venus::Try")
    

  call(string | coderef $method) (Venus::Try)

The call method takes a method name or coderef, registers it as the tryable routine, and returns the object. When invoked, the callback will received an "invocant" if one was provided to the constructor, the default "arguments" if any were provided to the constructor, and whatever arguments were provided by the invocant.

Since 0.01

call example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  my $call = $try->call(sub {
    my (@args) = @_;
    return [@args];
  });
  # bless({ on_catch => ... }, "Venus::Try")
    

  callback(string | coderef $method) (coderef)

The callback method takes a method name or coderef, and returns a coderef for registration. If a coderef is provided this method is mostly a passthrough.

Since 0.01

callback example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  my $callback = $try->callback(sub {
    my (@args) = @_;
    return [@args];
  });
  # sub { ... }
    
callback example 2
  package Example1;
  sub new {
    bless {};
  }
  sub test {
    my (@args) = @_;
    return [@args];
  }
  package main;
  use Venus::Try;
  my $try = Venus::Try->new(
    invocant => Example1->new,
  );
  my $callback = $try->callback('test');
  # sub { ... }
    
callback example 3
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  my $callback = $try->callback('missing_method');
  # Exception! (isa Venus::Try::Error) (see error_on_callback)
    

  catch(string $isa, string | coderef $method) (Venus::Try)

The catch method takes a package or ref name, and when triggered checks whether the captured exception is of the type specified and if so executes the given callback. If no callback is provided the exception is captured in a "default" operation and returned as a result.

Since 0.01

catch example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    die $try;
  });
  my $catch = $try->catch('Venus::Try', sub {
    my (@args) = @_;
    return [@args];
  });
  # bless({ on_catch => ... }, "Venus::Try")
    
catch example 2
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    $try->throw->error;
  });
  my $catch = $try->catch('Venus::Try::Error', sub {
    return (@_);
  });
  # bless({ on_catch => ... }, "Venus::Try")
    
catch example 3
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    $try->throw->error;
  });
  my $catch = $try->catch('Venus::Try::Error');
  # bless({ on_catch => ... }, "Venus::Try")
    

  default(string | coderef $method) (Venus::Try)

The default method takes a method name or coderef and is triggered if no "catch" conditions match the exception thrown.

Since 0.01

default example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    die $try;
  });
  my $default = $try->default(sub {
    my (@args) = @_;
    return [@args];
  });
  # bless({ on_catch => ... }, "Venus::Try")
    

  error(Ref $variable) (Venus::Try)

The error method takes a scalar reference and assigns any uncaught exceptions to it during execution. If no variable is provided a "catch" operation will be registered to capture all Venus::Error exceptions.

Since 0.01

error example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    die $try;
  });
  my $error = $try->error(\my $object);
  # bless({ on_catch => ... }, "Venus::Try")
    
error example 2
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    $try->throw->error;
  });
  my $error = $try->error;
  # bless({ on_catch => ... }, "Venus::Try")
    

  execute(coderef $code, any @args) (any)

The execute method takes a coderef and executes it with any given arguments. When invoked, the callback will received an "invocant" if one was provided to the constructor, the default "arguments" if any were provided to the constructor, and whatever arguments were passed directly to this method. This method can return a list of values in list-context.

Since 0.01

execute example 1
  package Example2;
  sub new {
    bless {};
  }
  package main;
  use Venus::Try;
  my $try = Venus::Try->new(
    invocant => Example2->new,
    arguments => [1,2,3],
  );
  my $execute = $try->execute(sub {
    my (@args) = @_;
    return [@args];
  });
  # [bless({}, "Example2"), 1, 2, 3]
    

  finally(string | coderef $method) (Venus::Try)

The finally method takes a package or ref name and always executes the callback after a try/catch operation. The return value is ignored. When invoked, the callback will received an "invocant" if one was provided to the constructor, the default "arguments" if any were provided to the constructor, and whatever arguments were provided by the invocant.

Since 0.01

finally example 1
  package Example3;
  sub new {
    bless {};
  }
  package main;
  use Venus::Try;
  my $try = Venus::Try->new(
    invocant => Example3->new,
    arguments => [1,2,3],
  );
  $try->call(sub {
    my (@args) = @_;
    return $try;
  });
  my $finally = $try->finally(sub {
    my (@args) = @_;
    $try->{args} = [@args];
  });
  # bless({ on_catch => ... }, "Venus::Try")
    

  maybe() (Venus::Try)

The maybe method registers a default "catch" condition that returns falsy, i.e. an undefined value, if an exception is encountered.

Since 0.01

maybe example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    die $try;
  });
  my $maybe = $try->maybe;
  # bless({ on_catch => ... }, "Venus::Try")
    

  no_catch() (Venus::Try)

The no_catch method removes any configured catch conditions and returns the object.

Since 0.01

no_catch example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    die $try;
  });
  $try->catch('Venus::Try', sub {
    my (@args) = @_;
    return [@args];
  });
  my $no_catch = $try->no_catch;
  # bless({ on_catch => ... }, "Venus::Try")
    

  no_default() (Venus::Try)

The no_default method removes any configured default condition and returns the object.

Since 0.01

no_default example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    die $try;
  });
  my $default = $try->default(sub {
    my (@args) = @_;
    return [@args];
  });
  my $no_default = $try->no_default;
  # bless({ on_catch => ... }, "Venus::Try")
    

  no_finally() (Venus::Try)

The no_finally method removes any configured finally condition and returns the object.

Since 0.01

no_finally example 1
  package Example4;
  sub new {
    bless {};
  }
  package main;
  use Venus::Try;
  my $try = Venus::Try->new(
    invocant => Example4->new,
    arguments => [1,2,3],
  );
  $try->call(sub {
    my (@args) = @_;
    return $try;
  });
  $try->finally(sub {
    my (@args) = @_;
    $try->{args} = [@args];
  });
  my $no_finally = $try->no_finally;
  # bless({ on_catch => ... }, "Venus::Try")
    

  no_try() (Venus::Try)

The no_try method removes any configured "try" operation and returns the object.

Since 0.01

no_try example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    return [@args];
  });
  my $no_try = $try->no_try;
  # bless({ on_catch => ... }, "Venus::Try")
    

  result(any @args) (any)

The result method executes the try/catch/default/finally logic and returns either 1) the return value from the successfully tried operation 2) the return value from the successfully matched catch condition if an exception was thrown 3) the return value from the default catch condition if an exception was thrown and no catch condition matched. When invoked, the "try" and "finally" callbacks will received an "invocant" if one was provided to the constructor, the default "arguments" if any were provided to the constructor, and whatever arguments were passed directly to this method. This method can return a list of values in list-context.

Since 0.01

result example 1
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    return [@args];
  });
  my $result = $try->result;
  # []
    
result example 2
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {
    my (@args) = @_;
    return [@args];
  });
  my $result = $try->result(1..5);
  # [1..5]
    
result example 3
  package main;
  use Venus::Try;
  my $try = Venus::Try->new;
  $try->call(sub {die});
  my $result = $try->result;
  # Exception! Venus::Error
    

This package may raise the following errors:

This package may raise an error_on_callback exception.

example 1

  # given: synopsis;
  my $input = {
    invocant => 'Example',
    callback => 'execute',
  };
  my $error = $try->throw('error_on_callback', $input)->catch('error');
  # my $name = $error->name;
  # "on_callback"
  # my $message = $error->render;
  # "Can't locate object method \"execute\" on package \"Example\""
    

Awncorp, "awncorp@cpan.org"

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.

2023-11-27 perl v5.40.2

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.