The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Venus::Kind - Kind Base Class

ABSTRACT

Kind Base Class for Perl 5

SYNOPSIS

  package Example;

  use Venus::Class;

  base 'Venus::Kind';

  package main;

  my $example = Example->new;

DESCRIPTION

This package provides identity and methods common across all Venus classes.

INTEGRATES

This package integrates behaviors from:

Venus::Role::Boxable

Venus::Role::Catchable

Venus::Role::Comparable

Venus::Role::Digestable

Venus::Role::Doable

Venus::Role::Dumpable

Venus::Role::Matchable

Venus::Role::Printable

Venus::Role::Testable

Venus::Role::Throwable

METHODS

This package provides the following methods:

checksum

  checksum() (Str)

The checksum method returns an md5 hash string representing the stringified object value (or the object itself).

Since 0.08

checksum example 1
  # given: synopsis;

  my $checksum = $example->checksum;

  # "859a86eed4b2d97eb7b830b02f06de32"
checksum example 2
  package Checksum::Example;

  use Venus::Class;

  base 'Venus::Kind';

  attr 'value';

  package main;

  my $example = Checksum::Example->new(value => 'example');

  my $checksum = $example->checksum;

  # "1a79a4d60de6718e8e5b326e338ae533"

class

  class() (Str)

The class method returns the class name for the given class or object.

Since 0.01

class example 1
  # given: synopsis;

  my $class = $example->class;

  # "Example"

numified

  numified() (Int)

The numified method returns the numerical representation of the object which is typically the length (or character count) of the stringified object.

Since 0.08

numified example 1
  # given: synopsis;

  my $numified = $example->numified;

  # 22
numified example 2
  package Numified::Example;

  use Venus::Class;

  base 'Venus::Kind';

  attr 'value';

  package main;

  my $example = Numified::Example->new(value => 'example');

  my $numified = $example->numified;

  # 7

safe

  safe(Str | CodeRef $code, Any @args) (Any)

The safe method dispatches the method call or executes the callback and returns the result, supressing warnings and exceptions. If an exception is thrown this method will return undef. This method supports dispatching, i.e. providing a method name and arguments whose return value will be acted on by this method.

Since 0.08

safe example 1
  # given: synopsis;

  my $safe = $example->safe('class');

  # "Example"
safe example 2
  # given: synopsis;

  my $safe = $example->safe(sub {
    ${_}->class / 2
  });

  # '0'
safe example 3
  # given: synopsis;

  my $safe = $example->safe(sub {
    die;
  });

  # undef

space

  space() (Space)

The space method returns a Venus::Space object for the given object.

Since 0.01

space example 1
  # given: synopsis;

  my $space = $example->space;

  # bless({ value => "Example" }, "Venus::Space")

stringified

  stringified() (Str)

The stringified method returns the object, stringified (i.e. a dump of the object's value).

Since 0.08

stringified example 1
  # given: synopsis;

  my $stringified = $example->stringified;

  # bless({}, 'Example')
stringified example 2
  package Stringified::Example;

  use Venus::Class;

  base 'Venus::Kind';

  attr 'value';

  package main;

  my $example = Stringified::Example->new(value => 'example');

  my $stringified = $example->stringified;

  # "example"

trap

  trap(Str | CodeRef $code, Any @args) (Tuple[ArrayRef, ArrayRef, ArrayRef])

The trap method dispatches the method call or executes the callback and returns a tuple (i.e. a 3-element arrayref) with the results, warnings, and exceptions from the code execution. If an exception is thrown, the results (i.e. the 1st-element) will be an empty arrayref. This method supports dispatching, i.e. providing a method name and arguments whose return value will be acted on by this method.

Since 0.08

trap example 1
  # given: synopsis;

  my $result = $example->trap('class');

  # ["Example"]
trap example 2
  # given: synopsis;

  my ($results, $warnings, $errors) = $example->trap('class');

  # (["Example"], [], [])
trap example 3
  # given: synopsis;

  my $trap = $example->trap(sub {
    ${_}->class / 2
  });

  # ["0"]
trap example 4
  # given: synopsis;

  my ($results, $warnings, $errors) = $example->trap(sub {
    ${_}->class / 2
  });

  # (["0"], ["Argument ... isn't numeric in division ..."], [])
trap example 5
  # given: synopsis;

  my $trap = $example->trap(sub {
    die;
  });

  # []
trap example 6
  # given: synopsis;

  my ($results, $warnings, $errors) = $example->trap(sub {
    die;
  });

  # ([], [], ["Died..."])

type

  type() (Type)

The type method returns a Venus::Type object for the given object.

Since 0.01

type example 1
  # given: synopsis;

  my $type = $example->type;

  # bless({ value => bless({}, "Example") }, "Venus::Type")