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

NAME

Venus::Role::Boxable - Boxable Role

ABSTRACT

Boxable Role for Perl 5

SYNOPSIS

  package Example;

  use Venus::Class;

  with 'Venus::Role::Boxable';

  attr 'text';

  package main;

  my $example = Example->new(text => 'hello, world');

  # $example->box('text')->lc->ucfirst->concat('.')->unbox->get;

  # "Hello, world."

DESCRIPTION

This package modifies the consuming package and provides a method for boxing itself. This makes it possible to chain method calls across objects and values.

METHODS

This package provides the following methods:

box

  box(Str | CodeRef $method, Any @args) (Self)

The box method returns the invocant boxed, i.e. encapsulated, using Venus::Box. 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

box example 1
  package main;

  my $example = Example->new(text => 'hello, world');

  my $box = $example->box;

  # bless({ value => bless(..., "Example") }, "Venus::Box")
box example 2
  package main;

  my $example = Example->new(text => 'hello, world');

  my $box = $example->box('text');

  # bless({ value => bless(..., "Venus::String") }, "Venus::Box")

  # $example->box('text')->lc->ucfirst->concat('.')->unbox->get;