NAME

Venus::Collect - Collect Class

ABSTRACT

Collect Class for Perl 5

SYNOPSIS

package main;

use Venus::Collect;

my $collect = Venus::Collect->new([1..4]);

# bless({value => [1..4], 'Venus::Collect')

DESCRIPTION

This package provides a generic collection utility class designed to provide a unified interface for working with data collections in Perl. It can wrap native Perl arrayrefs and hashrefs, as well as compatible objects (e.g., Venus::Array, Venus::Hash, Venus::Set, etc.), and apply functional transformations through callbacks.

This class allows you to create a collection object, then use the execute method to iterate over the contents and selectively transform or filter the data. The method supports both list-like and hash-like data structures, handling key/value iteration when applicable.

It's especially useful in scenarios where you need to apply consistent processing logic across various collection types without writing boilerplate code for each type.

INHERITS

This package inherits behaviors from:

Venus::Kind::Utility

INTEGRATES

This package integrates behaviors from:

Venus::Role::Valuable

METHODS

This package provides the following methods:

execute

execute(coderef $code) (any)

The execute method accepts a callback (i.e. coderef) and executes the callback for each key/value pair in the "value". For each iteration, the $_ variable is set to the value (in the key/value pair). The callback will be passed the key and values as arguments, made available via the @_ variable. The callback must return a tuple, i.e. a list with the key and value, to be returned as a result. This method returns a new instance of "value" provided consisting of only the key/value pairs returned from the callback.

Since 4.15

execute example 1
# given: synopsis

package main;

my $execute = $collect->execute;

# [1..4]
execute example 2
# given: synopsis

package main;

my $execute = $collect->execute(sub{});

# []
execute example 3
# given: synopsis

package main;

my $execute = $collect->execute(sub{$_});

# []
execute example 4
# given: synopsis

package main;

my $execute = $collect->execute(sub{@_});

# [1..4]
execute example 5
# given: synopsis

package main;

my $execute = $collect->execute(sub{$_%2==0 ? (@_) : ()});

# [2,4]
execute example 6
package main;

use Venus::Collect;

my $collect = Venus::Collect->new(value => {1..8});

my $execute = $collect->execute;

# {1..8}
execute example 7
package main;

use Venus::Collect;

my $collect = Venus::Collect->new(value => {1..8});

my $execute = $collect->execute(sub{});

# {}
execute example 8
package main;

use Venus::Collect;

my $collect = Venus::Collect->new(value => {1..8});

my $execute = $collect->execute(sub{$_});

# {}
execute example 9
package main;

use Venus::Collect;

my $collect = Venus::Collect->new(value => {1..8});

my $execute = $collect->execute(sub{@_});

# {1..8}
execute example 10
package main;

use Venus::Collect;

my $collect = Venus::Collect->new(value => {1..8});

my $execute = $collect->execute(sub{$_%6==0 ? (@_) : ()});

# {5,6}
execute example 11
package main;

use Venus::Collect;
use Venus::Array;

my $value = Venus::Array->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute;

# bless({value => [1..4], 'Venus::Array')
execute example 12
package main;

use Venus::Collect;
use Venus::Array;

my $value = Venus::Array->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{});

# bless({value => [], 'Venus::Array')
execute example 13
package main;

use Venus::Collect;
use Venus::Array;

my $value = Venus::Array->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_});

# bless({value => [], 'Venus::Array')
execute example 14
package main;

use Venus::Collect;
use Venus::Array;

my $value = Venus::Array->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{@_});

# bless({value => [1..4], 'Venus::Array')
execute example 15
package main;

use Venus::Collect;
use Venus::Array;

my $value = Venus::Array->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_%2==0 ? (@_) : ()});

# bless({value => [2,4], 'Venus::Array')
execute example 16
package main;

use Venus::Collect;
use Venus::Set;

my $value = Venus::Set->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute;

# bless({value => [1..4], 'Venus::Set')
execute example 17
package main;

use Venus::Collect;
use Venus::Set;

my $value = Venus::Set->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{});

# bless({value => [], 'Venus::Set')
execute example 18
package main;

use Venus::Collect;
use Venus::Set;

my $value = Venus::Set->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_});

# bless({value => [], 'Venus::Set')
execute example 19
package main;

use Venus::Collect;
use Venus::Set;

my $value = Venus::Set->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{@_});

# bless({value => [1..4], 'Venus::Set')
execute example 20
package main;

use Venus::Collect;
use Venus::Set;

my $value = Venus::Set->new([1..4]);

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_%2==0 ? (@_) : ()});

# bless({value => [2,4], 'Venus::Set')
execute example 21
package main;

use Venus::Collect;
use Venus::Hash;

my $value = Venus::Hash->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute;

# bless({value => {1..8}, 'Venus::Hash')
execute example 22
package main;

use Venus::Collect;
use Venus::Hash;

my $value = Venus::Hash->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{});

# bless({value => {}, 'Venus::Hash')
execute example 23
package main;

use Venus::Collect;
use Venus::Hash;

my $value = Venus::Hash->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_});

# bless({value => {}, 'Venus::Hash')
execute example 24
package main;

use Venus::Collect;
use Venus::Hash;

my $value = Venus::Hash->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{@_});

# bless({value => {1..8}, 'Venus::Hash')
execute example 25
package main;

use Venus::Collect;
use Venus::Hash;

my $value = Venus::Hash->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_%6==0 ? (@_) : ()});

# bless({value => {5,6}, 'Venus::Hash')
execute example 26
package main;

use Venus::Collect;
use Venus::Map;

my $value = Venus::Map->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute;

# bless({value => {1..8}, 'Venus::Map')
execute example 27
package main;

use Venus::Collect;
use Venus::Map;

my $value = Venus::Map->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{});

# bless({value => {}, 'Venus::Map')
execute example 28
package main;

use Venus::Collect;
use Venus::Map;

my $value = Venus::Map->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_});

# bless({value => {}, 'Venus::Map')
execute example 29
package main;

use Venus::Collect;
use Venus::Map;

my $value = Venus::Map->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{@_});

# bless({value => {1..8}, 'Venus::Map')
execute example 30
package main;

use Venus::Collect;
use Venus::Map;

my $value = Venus::Map->new(value => {1..8});

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_%6==0 ? (@_) : ()});

# bless({value => {5,6}, 'Venus::Map')
execute example 31
package main;

use Venus::Collect;

my $value = bless [1..4], 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute;

# bless([1..4], 'Example')
execute example 32
package main;

use Venus::Collect;

my $value = bless [1..4], 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{});

# bless([], 'Example')
execute example 33
package main;

use Venus::Collect;

my $value = bless [1..4], 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_});

# bless([], 'Example')
execute example 34
package main;

use Venus::Collect;

my $value = bless [1..4], 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{@_});

# bless([1..4], 'Example')
execute example 35
package main;

use Venus::Collect;

my $value = bless [1..4], 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_%2==0 ? (@_) : ()});

# bless([2,4], 'Example')
execute example 36
package main;

use Venus::Collect;

my $value = bless {1..8}, 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute;

# bless({1..8}, 'Example')
execute example 37
package main;

use Venus::Collect;

my $value = bless {1..8}, 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{});

# bless({}, 'Example')
execute example 38
package main;

use Venus::Collect;

my $value = bless {1..8}, 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_});

# bless({}, 'Example')
execute example 39
package main;

use Venus::Collect;

my $value = bless {1..8}, 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{@_});

# bless({1..8}, 'Example')
execute example 40
package main;

use Venus::Collect;

my $value = bless {1..8}, 'Example';

my $collect = Venus::Collect->new(value => $value);

my $execute = $collect->execute(sub{$_%6==0 ? (@_) : ()});

# bless({5,6}, 'Example')

new

new(any @args) (Venus::Collect)

The new method returns a new instance.

Since 4.15

new example 1
package main;

use Venus::Collect;

my $new = Venus::Collect->new;

# bless({value => undef}, 'Venus::Collect')
new example 2
package main;

use Venus::Collect;

my $new = Venus::Collect->new([1..4]);

# bless({value => [1..4]}, 'Venus::Collect')
new example 3
package main;

use Venus::Collect;

my $new = Venus::Collect->new(value => [1..4]);

# bless({value => [1..4]}, 'Venus::Collect')

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.