sub new { my ($class,%data) = @_; return bless \%data, $class; } #### use Acme::Playmate; my $playmate = new Acme::Playmate("2003", "04"); print "Details for playmate " . $playmate->{ "Name" } . "\n"; print "Birthdate" . $playmate->{ "BirthDate" } . "\n"; print "Birthplace" . $playmate->{ "BirthPlace" } . "\n"; #### package Some::User; sub new { bless {}, shift; } sub user { die "user() must be implemented in subclass" } sub pass { die "pass() must be implemented in subclass" } sub url { die "url() must be implemented in subclass" } #### package Some::User::Foo; sub user { 'bob' } sub pass { 'seKret' } sub url { 'http://somesite.com/' } #### my $foo = Some::User->new('Foo'); #### print $office->manager->name; #### print $office->manager_name; # manager_name calls $manager->name #### foreach my $tender (@tenders) { $tender->apply($order); } #### $object->{foo}; #### $object->foo; $object->set_foo($foo); #### if ($object->error) { $object->log_errors } # bad! #### sub log_errors { my $self = shift; return $self unless $self->error; $self->_log_errors; } #### sub connect { my $self = shift; unless ($self->_get_rss_feed) { $self->_log_errors; $self->_fetch_cached_copy; } $self; } #### $object->set_foo( $object->get_foo ); #### --- #YAML:1.0 !perl/Product bin: 19 data: category: 7 cost: 2.13 name: Shirt price: 3.13 id: 7 inv: 22 modified: 0 #### Product 7 Name: Shirt Category: Clothing (7) Cost: $2.13 Price: $3.13 On-hand: 22 Bin: Aisle 3, Shelf 5b (19) Record not modified #### sub new { my ($class, %data) = @_; bless \%data => $class; } #### sub set_some_property { my ($self, $property) = @_; $self->{some_prorety} = $property; # (sic) return $self; } sub some_property { $_[0]->{some_property} } #### ok($object->set_some_property($foo), 'Setting a property should succeed'); is($object->some_property, $foo, "... and fetching it should also succeed");