perlmeditation
xdg
<p>Dear fellow monks, I'm seeking comments on a new module I've written, including suggestions for improving its name before I release an initial version to CPAN. This module started as a thought exercise coming out of
Abigail's talk at YAPC::NA on [cpan://Lexical::Attributes] and Ingy's talks about [cpan://Spiffy]. It's now reached the point where the basics are working and it might be of interest. The working name is "Object::Local". Here's a quick example of use:</p>
<code>
package My::Object;
use strict;
use Object::Local;
give_methods our $self;
our $name : Prop;
our $color : Prop;
sub as_string : Method {
return ref($self) . " named '$name' with color '$color'";
}
1;
__ELSEWHERE__
use My::Object;
my $o = My::Object->new;
$o->set_name("xdg")->set_color("orange");
print $o->as_string;
__RESULT__
My::Object: named 'xdg' with color 'orange'
</code>
<readmore>
<p>At its core, this module helps create inside-out objects. It does some things like [cpan://Lexical::Attributes] and [cpan://Spiffy], but in some different (better? worse?) ways. Like those modules, it's a bit unusual compared to other object/class generators out there and has some of its own unique approaches:<p>
<ul>
<li>Provides $self automatically to methods -- without source filtering</li>
<li>Provides dynamic aliasing of properties within methods, eliminating accessor calls in methods -- again, without source filtering</li>
<li>Uses attributes to mark properties and methods, but only in the BEGIN phase so should be mod_perl friendly (though I haven't tested this yet)</li>
<li>Under the hood, uses local() and dynamic scoping of package variables ($self, et al.) while remaining 'strict' friendly</li>
</ul>
<p>Suggestions for a better name are welcome. Some criteria I'd like to apply to the naming include:</p>
<ul>
<li>evocative -- the name should convey some salient point about the module</li>
<li>relatively short -- the whole point of the module is less typing so a long name is counterproductive</li>
<li>catchy -- it would be nice to stand out from the zillions of Class:: modules since this actually is pretty wierd and different</li>
<li>not too frivolous -- e.g. "Spiffy" meets the above three but is a bit on the frivolous side (sorry, Ingy)</li>
</ul>
<p>I've considered variations such as:</p>
<ul>
<li>Object/Class::Less -- 'less' typing for the programmer, plus a bit of a pun</li>
<li>Class::Selfless -- more specific on the "less"</li>
<li>Object::Voodoo -- lots of under-the-hood namespace munging, function wrapping, etc. to make this work</li>
<li>Object::Dynamic -- dynamic scoping tricks heavily used throughout</li>
<li>Class::OutsideIn -- like InsideOut, but the global/local trick is another type of inversion</li>
</ul>
</readmore>
<p>Your early feedback on functionality or names is appreciated. When I release the module, I'll have more detailed commentary on the internals, speed benchmarks, and pros/cons versus other approaches.</p>
<p>Thank you,</p>
<div class="pmsig"><div class="pmsig-268515">
<p>-xdg</p>
<p><small><i>Code written by xdg and posted on PerlMonks is <a href="http://creativecommons.org/licenses/publicdomain">public domain</a>. It is provided <b>as is</b> with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.</i></small></p>
</div></div>