NAME
Package::Stash - routines for manipulating stashes
VERSION
version 0.10
SYNOPSIS
my $stash = Package::Stash->new('Foo');
$stash->add_package_symbol('%foo', {bar => 1});
# $Foo::foo{bar} == 1
$stash->has_package_symbol('$foo') # false
my $namespace = $stash->namespace;
*{ $namespace->{foo} }{HASH} # {bar => 1}
DESCRIPTION
Manipulating stashes (Perl's symbol tables) is occasionally necessary, but incredibly messy, and easy to get wrong. This module hides all of that behind a simple API.
NOTE: Most methods in this class require a variable specification that includes a sigil. If this sigil is absent, it is assumed to represent the IO slot.
METHODS
new $package_name
Creates a new Package::Stash
object, for the package given as the only argument.
name
Returns the name of the package that this object represents.
namespace
Returns the raw stash itself.
add_package_symbol $variable $value %opts
Adds a new package symbol, for the symbol given as $variable
, and optionally gives it an initial value of $value
. $variable
should be the name of variable including the sigil, so
Package::Stash->new('Foo')->add_package_symbol('%foo')
will create %Foo::foo
.
Valid options (all optional) are filename
, first_line_num
, and last_line_num
.
$opts{filename}
, $opts{first_line_num}
, and $opts{last_line_num}
can be used to indicate where the symbol should be regarded as having been defined. Currently these values are only used if the symbol is a subroutine ('&
' sigil) and only if $^P & 0x10
is true, in which case the special %DB::sub
hash is updated to record the values of filename
, first_line_num
, and last_line_num
for the subroutine. If these are not passed, their values are inferred (as much as possible) from caller
information.
This is especially useful for debuggers and profilers, which use %DB::sub
to determine where the source code for a subroutine can be found. See http://perldoc.perl.org/perldebguts.html#Debugger-Internals for more information about %DB::sub
.
remove_package_glob $name
Removes all package variables with the given name, regardless of sigil.
has_package_symbol $variable
Returns whether or not the given package variable (including sigil) exists.
get_package_symbol $variable
Returns the value of the given package variable (including sigil).
get_or_add_package_symbol $variable
Like get_package_symbol
, except that it will return an empty hashref or arrayref if the variable doesn't exist.
remove_package_symbol $variable
Removes the package variable described by $variable
(which includes the sigil); other variables with the same name but different sigils will be untouched.
list_all_package_symbols $type_filter
Returns a list of package variable names in the package, without sigils. If a type_filter
is passed, it is used to select package variables of a given type, where valid types are the slots of a typeglob ('SCALAR', 'CODE', 'HASH', etc).
BUGS
No known bugs.
Please report any bugs through RT: email bug-package-stash at rt.cpan.org
, or browse to http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Package-Stash.
SUPPORT
You can find this documentation for this module with the perldoc command.
perldoc Package::Stash
You can also look for information at:
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
AUTHOR
Jesse Luehrs <doy at tozt dot net>
Mostly copied from code from Class::MOP::Package, by Stevan Little and the Moose Cabal.
SEE ALSO
-
This module is a factoring out of code that used to live here
COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Jesse Luehrs.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.