For Programmers: Free Programming Magazines  


Home > Archive > PERL Modules > February 2005 > Class::MethodMaker v2 syntax help requested









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Class::MethodMaker v2 syntax help requested
tv

2005-02-08, 3:56 am

I've read about Class::MethodMaker in Damian Conway's 'Object Oriented
Perl'. It uses v1 syntax. The latest v2 documentation is extremely
minimal, not to mention full of typos. I've googled everywhere looking
for v2 examples especially for -init and -default behavior examples,
but no luck.

Could a kind soul help me by converting Damian's v1 example to v2
syntax? It follows below.
Thanks,
-Tom

package CD::Music;
$VERSION = 4.00;
use strict;

use Class::MethodMaker
new_with_init => 'new',
new_hash_init => '_init_args',
static_hash => 'counter',
get_set => [ qw( name artist publisher ISBN tracks rating room
shelf ) ] ;

sub count { $_[0]->counter('count') }
sub _incr_count { $_[0]->counter_tally('count') }
sub _decr_count { $_[0]->counter(count=>$_[0]->counter('count')-1) }

sub init
{
my ($self, %args) = @_;
$self->_init_args(%args);
$self->_incr_count();
return $self;
}

# destructor adjusts object count
sub DESTROY { $_[0]->_decr_count() }

# get or set room and shelf together
sub location
{
my ($self, $room, $shelf) = @_;
$self->room($room) if $room;
$self->shelf($shelf) if $shelf;
return ($self->room, $self->shelf)
}

package main;
# Create an object storing a CD's details
my $cd = CD::Music->new(
name => "Piano Concerto 20",
artist => "Mozart",
rating => 10,
room => 5,
shelf => 1,
publisher => "Salieri Intl.",
ISBN => "1426-43235624-2",
);


# What's the CD called?
print $cd->name, "\n";
print $cd->artist, "\n";
print $cd->rating, "\n";
print $cd->room, "\n";

# Where would we find it?
printf "Room %s, shelf %s\n", $cd->location;

# Move it to room 5, shelf 3
$cd->location(5,3);
printf "Room %s, shelf %s\n", $cd->location;

$cd->name("Tacobell Cannon");
$cd->tracks(1000);
print $cd->name, "\n";
print $cd->tracks, "\n";

print "There have been ", CD::Music->count(), " CDs created\n";

aprilia1k

2005-02-20, 6:49 pm

quote:
Originally posted by tv
I've read about Class::MethodMaker in Damian Conway's 'Object Oriented Perl'. It uses v1 syntax. The latest v2 documentation is extremely minimal, not to mention full of typos. I've googled everywhere looking for v2 examples especially for -init and -default behavior examples, but no luck.


I too have read Conway's book and plan to use MethodMaker forthwith And searching for the doc, I find the CPAN doc for ver 1.1, complete with the offerings which Damian mentions; when I look at the latest v2 doc, not only is it sparse and obviously "in progress", but - it omits tons of functionality that is doc'd for v1, e.g. Classes/object-instances as types via the "object" specifier.

Anyway - the scary thing is when briefly perusing the source code, v2 actually does seem to have dropped the aforementioned functionality - nothing in there to handle an object specifier for example... all I can think is it is still work-in-progress and perhaps should not be available on CPAN yet... ???s

Please correct me if I'm wrong - perhaps CPAN docs are just out of date, including the attached source? For now I just have to go with v1.1 if I can find the rpm for the module.
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com