Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Should I use Fields, InsideOuts, or Properties?

by mugwumpjism (Hermit)
on Jul 06, 2005 at 22:24 UTC ( [id://472955]=note: print w/replies, xml ) Need Help??


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";

Replies are listed 'Best First'.
Re^2: Should I use Fields, InsideOuts, or Properties?
by adrianh (Chancellor) on Jul 08, 2005 at 16:38 UTC
    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.

    To be fair that's not really a problem specific to pseudohashes - the same applies to any perl object representation that doesn't abstract access behind methods.

Re^2: Should I use Fields, InsideOuts, or Properties?
by tlm (Prior) on Jul 17, 2005 at 21:04 UTC

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

    I know practically nothing about Class::Tangram, but I have to say this: it's got to be the most ineptly named module in all of CPAN. The fact that anyone uses it at all, given its name, is a marvel, and an exceptionally effective endorsement. To paraphrase the Smucker's slogan: with a name like Tangram, it has to be good.

    the lowliest monk

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://472955]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (5)
As of 2024-04-19 07:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found