Class::Easy - make class routine easy
This module is a functionality compilation of some good modules from CPAN. Ideas are taken from Class::Data::Inheritable, Class::Accessor, Modern::Perl and Moose at least.
Instead of building monstrous alternatives to Moose or making thousand modules for every function I need, I decide to write small and efficient libraries for everyday use. Class::Easy::Base is a base component for classes.
SYNOPSIS
# automatic loading of strict, warnings and utf8, like common::sense use Class::Easy::Import; # or same as above + functions like 'has', 'try_to_use', 'timer' and 'logger' use Class::Easy; # try to load package IO::Easy, return 1 when success try_to_use ('IO::Easy'); # try to load package IO::Easy, but search for package existence # within %INC instead of symbolic table try_to_use_inc ('IO::Easy'); # for current package has "property_ro"; # make readonly object accessor has "property_rw", is => 'rw'; # make readwrite object accessor has global25 => 25; # make readonly static accessor with value 25 has "global", global => 1, is => 'rw'; # make readwrite static accessor # make subroutine in package main make_accessor ('main', 'initialize', default => sub { $::initialized = 1; return "initialized!"; }); # see documentation for Class::Easy::Log # string "[PID] [PACKAGE(STRING)] [DBG] something" logged debug "something"; # see documentation for Class::Easy::Timer my $t = timer ('long operation'); # … long operation my $time = $t->lap ('another long op'); # … $time = $t->end; # $time contains time between last 'lap' or 'timer' # and 'end' call $time = $t->total; # now $time contains total time between timer init # and end call
create accessor named $name in current scope
create accessor in selected scope
tries to use specified package with printing error message to STDERR or "_quiet" version.
return true value in case of successful operation or existing non-package references in symbol table. correctly works with virtual packages.
takes package name or package name chunks, for example:
try_to_use ('IO::Easy'); # or equivalent try_to_use (qw(IO Easy));
if you want to separate io errors from syntax errors you may want to check $! variable;
for example:
use Errno qw(:POSIX); if (!try_to_use ('IO::Easy')) { die 'file not found for package IO::Easy' if $!{ENOENT}; }
similar to the try_to_use, but check for module presence in %INC instead of symbol table lookup.
create new Class::Easy::Timer object
retrieve real name for coderef. useful for anonymous or imported functions
get_coderef_info (*{Class::Easy::timer}{CODE}); # ('Class::Easy', 'timer') stash_name (*{Class::Easy::timer}{CODE}); # 'Class::Easy' sub_name (*{Class::Easy::timer}{CODE}); # 'timer' sub_fullname (*{Class::Easy::timer}{CODE}); # 'Class::Easy::timer'
in scalar context return hashref with complete coderef info for class. - key 'inherited' contains all inherited methods, separated by class name, - key 'runtime' contains all code references in current package which point to anonymous method, - key 'method' contains all local methods, - key 'imported' contains all imported subs, separated by class name
{ 'inherited' => { 'My::Circle' => [ 'new', 'global_hash', 'global_hash_rw', 'new_default', 'global_hash_rw_default', 'dim_x', 'id', 'dim_y' ] }, 'runtime' => { 'global_ro' => 1, 'global_one' => 1, 'global_one_defined' => 1, 'dim_z' => 1, 'accessor' => 1 }, 'method' => { 'sub_z' => 1 }, 'imported' => { 'Class::Easy' => { 'make_accessor' => 'make_accessor', 'try_to_use' => 'try_to_use', 'try_to_use_inc' => 'try_to_use_inc', 'try_to_use_quiet' => 'try_to_use_quiet', 'has' => 'has', 'timer' => 'timer', 'try_to_use_inc_quiet' => 'try_to_use_inc_quiet' }, 'Class::Easy::Log' => { 'critical' => 'critical', 'release_stderr' => 'release_stderr', 'catch_stderr' => 'catch_stderr', 'debug' => 'debug', 'debug_depth' => 'debug_depth', 'logger' => 'logger' } } };
'local' version of subroutine doesn't contains any inherited methods
Ivan Baktsheev, <apla at the-singlers.us>
<apla at the-singlers.us>
Please report any bugs or feature requests to my email address, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Class-Easy. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
Copyright 2008-2009 Ivan Baktsheev
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
Non-ASCII character seen before =encoding in '…'. Assuming UTF-8
To install Class::Easy, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Class::Easy
CPAN shell
perl -MCPAN -e shell install Class::Easy
For more information on module installation, please visit the detailed CPAN module installation guide.