Cache::Memcached::Managed::Multi - multiple Cache::Memcache::Managed objects


Cache-Memcached-Managed documentation Contained in the Cache-Memcached-Managed distribution.

Index


Code Index:

NAME

Top

Cache::Memcached::Managed::Multi - multiple Cache::Memcache::Managed objects

SYNOPSIS

Top

 use Cache::Memcached::Managed::Multi;

 my $multi = Cache::Memcached::Managed::Multi->new( @managed );

DESCRIPTION

Top

Provides the same API as Cache::Memcached::Managed, but applies all methods called to all of the objects specified, except for new and objects.

CONTEXT

Top

All methods are called on all of the Cache::Memcached::Managed objects in the same context (list, scalar or void) in which the method is called on the Cache::Memcached::Managed::Multi object. The return value differs in format depending on the context also:

scalar
 my $listref = $multi->method;
 print "Result: @{$listref}\n";

When called in scalar context, a list ref with scalar values is returned in the same order in which the objects are used (which is determined by the order in which they were supplied with new and returned by objects..

list
 my @listref = $multi->method;
 print "Result $_: @{$listref[$_]}\n" foreach 0..$#listref;

When called in list context, a list of list references is returned in the same order in which the objects are used (which is determined by the order in which they were supplied with new and returned by objects.

void
 $multi->method;

When called in void context, nothing is returned (not strangely enough ;-).

SPECIFIC CLASS METHODS

Top

There is only one specific class method.

new

 my $multi = Cache::Memcached::Managed::Multi->new( @managed );

Create an object containing multiple Cache::Memcached::Managed objects. Returns the instantiated object.

SPECIFIC INSTANCE METHODS

Top

objects

 my @managed = $multi->objects;

Returns the list of instantiated Cache::Memcached::Managed objects that the object is a proxy for.

AUTHOR

Top

 Elizabeth Mattijsen

COPYRIGHT

Top


Cache-Memcached-Managed documentation Contained in the Cache-Memcached-Managed distribution.

package Cache::Memcached::Managed::Multi;

# Make sure we have version info for this module

$VERSION = '0.20';

BEGIN { # We're fooling the Kwalitee checker into thinking we're strict
use strict;
}

#--------------------------------------------------------------------------
# No, we're NOT using strict here.  There are several reasons, the most
# important is that we're doing a lot of nasty stuff here.
# If you _do_ want stricture as a developer of this module, simply activate
# the line below here
#--------------------------------------------------------------------------
#use strict;

# At compile time
#  Create list with method names

BEGIN {
    my @method = qw(
 add
 data
 dead
 decr
 delete
 delete_group
 delimiter
 directory
 errors
 expiration
 flush_all
 flush_interval
 get
 get_group
 get_multi
 grab_group
 group
 group_names
 inactive
 incr
 namespace
 replace
 reset
 servers
 set
 start
 stats
 stop
 version
    );

#  Create a method for each of the methods which
#   Obtains the list of objects
#   If called in list context
#    Call the methods in list context and return list of list refs
#   Elseif called in scalar context
#    Call the methods in scalar context and return list ref of values
#   Call the methods in void context

    eval <<SUB foreach @method;
sub $_ {
    my \$objects = shift;
    if (wantarray) {
        return map { [\$_->$_( \@_ )] } \@{\$objects};
    } elsif (defined wantarray) {
        return [map { scalar \$_->$_( \@_ ) } \@{\$objects}];
    }
    \$_->$_( \@_ ) foreach \@{\$objects};
} #$_
SUB
} #BEGIN

# Satisfy -require-

1;

#---------------------------------------------------------------------------
#
# Class methods
#
#---------------------------------------------------------------------------
# new
#
# Return instantiated object
#
#  IN: 1 class
#      2..N list of Cache::Memcached::Managed (compatible) objects
# OUT: 1 instantiated object

sub new { my $class = shift; bless \@_,$class } #new

#---------------------------------------------------------------------------
#
# Object methods
#
#---------------------------------------------------------------------------
# objects
#
#  IN: 1 instantiated object
# OUT: 1..N objects of which this object consists

sub objects { @{$_[0]} } #objects

#---------------------------------------------------------------------------

__END__