package Venus::Role::Matchable; use 5.018; use strict; use warnings; use Venus::Role 'with'; # METHODS sub match { my ($self, $method, @args) = @_; require Venus::Match; local $_ = $self; my $match = Venus::Match->new($method ? scalar($self->$method(@args)) : $self); return $match; } # EXPORTS sub EXPORT { ['match'] } 1; =head1 NAME Venus::Role::Matchable - Matchable Role =cut =head1 ABSTRACT Matchable Role for Perl 5 =cut =head1 SYNOPSIS package Example; use Venus::Class; with 'Venus::Role::Matchable'; attr 'active'; sub validate { my ($self) = @_; return $self->match->when('active')->then(true)->none(false); } package main; my $example = Example->new; # $example->validate->result; # 0 =cut =head1 DESCRIPTION This package modifies the consuming package and provides a mechanism for assembling complex pattern matching operations. =cut =head1 METHODS This package provides the following methods: =cut =head2 match match(Str | CodeRef $method, Any @args) (Match) The match method returns a L object having the match value set to the invocant or the result of a dispatch. This method supports dispatching, i.e. providing a method name and arguments whose return value will be acted on by this method. I> =over 4 =item match example 1 package main; my $example = Example->new; my $match = $example->match; # bless({..., value => bless(..., 'Example')}, 'Venus::Match') =back =over 4 =item match example 2 package main; my $example = Example->new; my $match = $example->match('active'); # bless({..., value => undef}, 'Venus::Match') =back =over 4 =item match example 3 package main; my $example = Example->new(active => 1); my $match = $example->match('active'); # bless({..., value => 1}, 'Venus::Match') =back =cut