This module provides one function, delete_sub, that deletes the
subroutine whose name is passed to it. (To load the module without
importing the function, write use Sub::Delete();.)
This does more than simply undefine the subroutine in the manner of
undef &foo, which leaves a stub that can trigger AUTOLOAD (and,
consequently, won't work for deleting methods). The subroutine is
completely obliterated from the symbol table (though there may be
references to it elsewhere, including in compiled code).
Sometimes you want roles. You're not sure about Moose, Mouse, Moo and
what was that damned Squirrel thing anyway? Then there's Class::Trait,
but it has a funky syntax and the maintainer's deprecated it in favor
of Moose::Role and you really don't care that it handles overloading,
instance application or has a workaround for the SUPER:: bug. You
think a meta-object protocol sounds nifty, but you don't understand
it. Maybe you're not sure you want the syntactic sugar for object
declaration. Maybe you've convinced your colleagues that roles are a
good idea but they're leery of dragging in Moose (your author has had
this happen more than once and heard of others making the same
complaint). Sometimes you just want good old-fashioned roles which let
you separate class responsibility from code reuse.
Role::HasMessage is an extremely simple role. A class that includes
Role::HasMessage is promising to provide a message method that
returns a string summarizing the message or event represented by
the object. It does not provide any actual behavior.
Role::Identifiable::HasIdent is an incredibly simple role. It adds
a required ident attribute that stores a simple string, meant to
identify exceptions.
Role::Identifiable::HasTags adds the ability for your class and its
composed parts (roles, superclasses) as well as instances of it to
contribute to a pool of tags describing each instance.
Role composition can be thought of as much more clever and meaningful multiple
inheritance. The basics of this implementation of roles is:
- If a method is already defined on a class, that method will not be composed in
from the role.
- If a method that the role "requires" to be implemented is not implemented,
role application will fail loudly.
Unlike Class::C3, where the last class inherited from "wins," role composition
is the other way around, where first wins. In a more complete system (see Moose)
roles are checked to see if they clash. The goal of this is to be much simpler,
hence disallowing composition of multiple roles at once.
The Rose::DateTime::* modules provide a few convenience functions
and objects for use with DateTime dates.
Rose::Object is a generic object base class. It provides very little
functionality, but a healthy dose of convention.
R3 is an URL router library with high performance, thus, it's
implemented in C. It compiles your route paths into a prefix trie.
By using the constructed prefix trie in the start-up time, you can
dispatch routes with efficiency.
RunApp streamlines the process for configuring applications that
requires one or more web servers and/or other daemons, during
development or deployment.
It builds the config files required by the services from the $config
hash, such as apache's httpd.conf.
This module makes it easy to install subroutines into packages without
the unsightly mess of no strict or typeglobs lying about where just
anyone can see them.