| Lexical-Util documentation | Contained in the Lexical-Util distribution. |
Lexical::Util - utilities for lexical item manipulation
use Lexical::Util qw(frame_to_cvref lexalias ref_to_lexical); $cvref = frame_to_cvref($level); lexalias($cvref, '$name', \$variable); $err = lexical_alias($cvref, '$name', \$variable); $ref = ref_to_lexical($cvref, '$name');
Lexical::Util is a module containing some common routines used by modules
dealing with the lexical variables of routines other than their own. They are
taken from various sources, including PadWalker,
Perl6::Binding, and Lexical::Alias. This
module is used in version 0.7 and greater of Perl6::Binding, as well as in the
Object::Variables (Object::Variables) and Sub::Declaration (Sub::Declaration)
packages, to prevent duplication of code.
This package should not be needed or used by end users.
Note: this module uses the CvPADLIST (CvPADLIST in perlintern) and CvDEPTH macros, which are listed in perlintern (perlintern) and not part of the perl API. They work in the versions I've been able to test on (5.6.1 and 5.8.4), but may change in the future. To avoid possible problems, this module tests to see that the Perl version is less than 5.9.0.
Nothing is exported by default, but you can request the following:
$cvref = frame_to_cvref($level);
Finds the code reference (subroutine) for the stack frame indicated by $level, which is similar to the argument for caller in perlfunc. If the return value is true, the function succeeded.
lexalias($cvref, '$name', \$value);
Creates a lexical alias for a variable called $name pointing to the variable $value. $cvref is a code reference returned by "frame_to_cvref". If $cvref is undef, this routine dies.
$errmsg = lexical_alias($cvref, '$name', \$value);
Same as above, but instead of dying on error, it returns an error message. If the return value is false, the function succeeded. This can allow more useful error messages from modules that call it.
$ref = ref_to_lexical($cvref, '$name');
Returns a reference to the named lexical variable in the specified stack frame. $cvref is a code reference returned by "frame_to_cvref". If $cvref is undef or the specified name isn't found, this routine dies.
Copyright 2004 Kevin Michael Vail
This program is free software. It may be copied and/or redistributed under the same terms as Perl itself.
Kevin Michael Vail <kvail@cpan.org>
| Lexical-Util documentation | Contained in the Lexical-Util distribution. |
##============================================================================== ## Lexical::Util - utilities for lexical item manipulation ##============================================================================== ## Copyright 2004 Kevin Michael Vail ## This program is free software. It may be copied and/or redistributed under ## the same terms as Perl itself. ##============================================================================== ## $Id: Util.pm,v 0.8 2004/07/29 02:41:56 kevin Exp $ ##============================================================================== require 5.006; package Lexical::Util; use strict; use warnings; our ($VERSION) = q$Revision: 0.8 $ =~ /Revision:\s+(\S+)/ or $VERSION = '0.0'; use Carp; BEGIN { ## Check to see that the version of Perl isn't too new. if ($^V && $^V ge 5.9.0) { croak "Lexical::Util $VERSION not supported past Perl version 5.8.x"; } } require XSLoader; XSLoader::load('Lexical::Util', $VERSION); use base qw(Exporter); our @EXPORT_OK = qw(frame_to_cvref lexalias lexical_alias ref_to_lexical);
1; ##============================================================================== ## $Log: Util.pm,v $ ## Revision 0.8 2004/07/29 02:41:56 kevin ## Add lexical_alias routine. ## ## Revision 0.7 2004/07/27 02:23:02 kevin ## POD change just to bump version number for CPAN. ## ## Revision 0.6 2004/07/25 04:44:44 kevin ## Update POD; change the way the version number is computed. ## ## Revision 0.5 2004/07/10 01:14:32 kevin ## Add ref_to_lexical function. ## ## Revision 0.4 2004/06/06 01:01:33 kevin ## Bump version number. ## ## Revision 0.3 2004/06/06 00:46:47 kevin ## Add check for Perl version >= 5.9.0. ## ## Revision 0.2 2004/05/31 04:39:30 kevin ## Modify the documentation to reflect the facts. ## ## Revision 0.1 2004/05/31 02:44:52 kevin ## Initial revision ##==============================================================================