This is an old revision of the document!
Awesome.pm: [code=perl] package Awesome;
use strict;
# static (class-wide) variable my $object_count = 0;
# constructor – a static method that creates and returns a new object sub new {
my $class = shift; # remaining args are constructor parameters. # we'll assume it takes one param: name. this parameter gets saved in our new "object", a blessed hash ref my $self = {name => $_[0]}; bless($self,$class); $object_count++; # increment a static counter return $self;
}
# static method – the first arg is assumed to be the class name (though it could still be called with an object) sub count_objects_created {
shift; # discard class # remaining args are parameters return $object_count;
}
# instance method – first arg is an object (though it can still be called (erroneously) as a static method) sub do_stuff {
my $self = shift; # ... $self->{stuff} = 'done'; # set an instance variable
}
# accessor/mutator instance method – run $obj→name() to read, $obj→name("newvalue") to write sub name {
my $self = shift; if (@_) { $self->{name} = $_[0]; } return $self->{name};
}
1; # so the require or use succeeds [/code]
Example use:
[code=perl] #!/usr/bin/perl
use strict; use Awesome;
my $obj = Awesome→new("bob"); $obj→name("superbob"); $obj→{name} = "secret bob"; # direct access possible, but unadvisable my $n = Awesome→count_objects_created(); $obj→do_stuff(); [/code]