http://www.perlmonks.org?node_id=472955


in reply to Should I use Fields, InsideOuts, or Properties?

As others may have pointed out, the problem with pseudohashes is that if you do ever want to override what happens when a property is retrieved or set, you need to use tie.

Class::Tangram has been designed with OO considerations like this in mind.

With Class::Tangram, accessing properties becomes method calls; you don't worry about spelling hash properties wrong, because when you define extra accessors and mutators, you may call the generated ones via ::SUPER;

package MyClass; use base qw(Class::Tangram); our $fields = { int => [ qw(a b c d e) ] }; sub set_b { my $self = shift; my $new_b = shift; $self->SUPER::set_b($new_b + 3); } package main; my $foo = MyClass->new( a => 1, b => 2 ); print $foo->a; # prints 1 print $foo->b; # prints 5

Note that the set_b method would have been called regardless of whether you called it directly, or used the alternate ways to set the attribute;

$foo->b(4); # note: prints warning $foo->set_b(4);

This is all achieved without ugly AUTOLOAD kludges.

$h=$ENV{HOME};my@q=split/\n\n/,`cat $h/.quotes`;$s="$h/." ."signature";$t=`cat $s`;print$t,"\n",$q[rand($#q)],"\n";