Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
namespace::sweep(3)   User Contributed Perl Documentation  namespace::sweep(3)

NAME
       namespace::sweep	- Sweep	up imported subs in your classes

VERSION
       version 0.006

SYNOPSIS
	   package Foo;

	   use namespace::sweep;
	   use Some::Module qw(some_function);

	   sub my_method {
		my $foo	= some_function();
		...
	   }

	   package main;

	   Foo->my_method;	# ok
	   Foo->some_function;	# ERROR!

DESCRIPTION
       Because Perl methods are	just regular subroutines, it's difficult to
       tell what's a method and	what's just an imported	function. As a result,
       imported	functions can be called	as methods on your objects. This
       pragma will delete imported functions from your class's symbol table,
       thereby ensuring	that your interface is as you specified	it. However,
       code inside your	module will still be able to use the imported
       functions without any problems.

ARGUMENTS
       The following arguments may be passed on	the "use" line:

       -cleanee
	   If you want to clean	a different class than the one importing this
	   pragma, you can specify it with this	flag. Otherwise, the importing
	   class is assumed.

	       package Foo;
	       use namespace::sweep -cleanee =>	'Bar'	# sweep	up Bar.pm

       -also
	   This	lets you provide a mechanism to	specify	other subs to sweep up
	   that	would not normally be caught. (For example, private helper
	   subs	in your	module's class that should not be called as methods.)

	       package Foo;
	       use namespace::sweep -also => '_helper';		 # sweep up single sub
	       use namespace::sweep -also => [qw/foo bar baz/];	 # list	of subs
	       use namespace::sweep -also => qr/^secret_/;	 # subs	matching regex

	   You can also	specify	a subroutine reference which will receive the
	   symbol name as $_. If the sub returns true, the symbol will be
	   swept.

	       # sweep up those	rude four-letter subs
	       use namespace::sweep -also => sub { return 1 if length $_ == 4 }

	   You can also	combine	these methods into an array reference:

	       use namespace::sweep -also => [ 'string', sub { 1 if /$pat/ and $_ !~ /$other/ }, qr/^foo_.+/ ];

RATIONALE
       This pragma was written to address some problems	with the excellent
       namespace::autoclean.  In particular, namespace::autoclean will remove
       special symbols that are	installed by overload, so you can't use
       namespace::autoclean on objects that overload Perl operators.

       Additionally, namespace::autoclean relies on Class::MOP to figure out
       the list	of methods provided by your class. This	pragma does not	depend
       on Class::MOP or	Moose, so you can use it for non-Moose classes without
       worrying	about heavy dependencies.

       However,	if your	class has a Moose (or Moose-compatible)	"meta" object,
       then that will be used to find e.g. methods from	composed roles that
       should not be deleted.

       In most cases, namespace::sweep should work as a	drop-in	replacement
       for namespace::autoclean.  Upon release,	this pragma passes all of
       namespace::autoclean's tests, in	addition to its	own.

CAVEATS
       This is an early	release	and there are bound to be a few	hiccups	along
       the way.

ACKNOWLEDGEMENTS
       Thanks Florian Ragwitz and Tomas	Doran for writing and maintaining
       namespace::autoclean.

       Thanks to Toby Inkster for submitting some better code for finding
       "meta" objects.

SEE ALSO
       namespace::autoclean, namespace::clean, overload

AUTHOR
       Mike Friedman <friedo@friedo.com>

COPYRIGHT AND LICENSE
       This software is	copyright (c) 2011 by Mike Friedman.

       This is free software; you can redistribute it and/or modify it under
       the same	terms as the Perl 5 programming	language system	itself.

perl v5.24.1			  2012-10-15		   namespace::sweep(3)

NAME | VERSION | SYNOPSIS | DESCRIPTION | ARGUMENTS | RATIONALE | CAVEATS | ACKNOWLEDGEMENTS | SEE ALSO | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=namespace::sweep&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help