sourCEntral - mobile manpages

pdf

Package::Stash

NAME

Package::Stash − routines for manipulating stashes

VERSION

version 0.05

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>.

SEE ALSO

Class::MOP::Package

This module is a factoring out of code that used to live here

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

<http://annocpan.org/dist/Package−Stash>

CPAN Ratings

<http://cpanratings.perl.org/d/Package−Stash>

RT: CPAN ’s request tracker

<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Package−Stash>

Search CPAN

<http://search.cpan.org/dist/Package−Stash>

AUTHOR

  Jesse Luehrs <doy at tozt dot net>

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.

pdf