| Cache-Memcached-Managed documentation | Contained in the Cache-Memcached-Managed distribution. |
Cache::Memcached::Managed::Multi - multiple Cache::Memcache::Managed objects
use Cache::Memcached::Managed::Multi; my $multi = Cache::Memcached::Managed::Multi->new( @managed );
Provides the same API as Cache::Memcached::Managed, but applies all methods called to all of the objects specified, except for new and objects.
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:
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..
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.
$multi->method;
When called in void context, nothing is returned (not strangely enough ;-).
There is only one specific class method.
my $multi = Cache::Memcached::Managed::Multi->new( @managed );
Create an object containing multiple Cache::Memcached::Managed objects. Returns the instantiated object.
my @managed = $multi->objects;
Returns the list of instantiated Cache::Memcached::Managed objects that the object is a proxy for.
Elizabeth Mattijsen
(C) 2005 - 2006 BOOKINGS (C) 2007 BOOKING.COM
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
| 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__