NAME
Context::Handle - A convenient context propagation proxy thingy.
SYNOPSIS
use Context::Handle qw/context_sensitive/;
sub wrapping {
my $rv = context_sensitive {
$some_thing->method(); # anything really
};
# you can do anything here
$rv->return; # returns the value in the right context
# not reached
}
DESCRIPTION
This module lets you delegate to another method and return the value
without caring about context propagation.
The level of support is tied to what Want does - this module tries to
make all the distinctions Want can make fully supported, for example
array dereference context, boolean context, etc.
EXPORTS
Nothing is exported by default.
context_sensitive BLOCK
This is a convenience shortcut that calls "new"
METHODS
Regular Usage
new $code
This method invokes $code in the calling sub's context, and returns
an object that saves the return value.
rv_container
This instance method returns the return value container object. The
only useful methods for the RV containers is "value", which has a
delegator anyway.
value
This returns the value from the "rv_container"
return
This (ab)uses Want to perform a double return.
Saying
$rv->return;
is just like
return $rv->value;
Introspection
Incidientially due to the needs of the wrapping layer this module also
provides an OO interface to Want, more or less ;-)
bool
void
scalar
list
refarray
refhash
refscalar
refobject
refcode
refglob
All of these methods return boolean values, with respect to the
TODO
* pseudoboolean context - the right side of && and the left side of ||
evaulate in boolean context, but still return a meaningful value.
* Glob assignment context. I'm not sure how to make the value
propagate back once it's been assigned to the glob - it's hard to
know what it is without inspecting the slots and that's kinda
tricky.
* Lvalue assignment
* use Sub::Uplevel to hide the wrapping
* context arity - Want's count stuff. This can probably be done using
@list[0..$x] = (...), but might need to be emulated with eval. See
"perldoc -f split".
ACKNOWLEGMENTS
Robin Houston for Want and lots of help by email
AUTHOR
Yuval Kogman <nothingmuch@woobling.org>
COPYRIGHT & LICENSE
Copyright (c) 2006 the aforementioned authors. All rights
reserved. This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.