use Tie::SecureHash; package DogTag; sub new { my ($class, %args) = @_; Tie::SecureHash->new( $class, __name => $args{name}, __rank => $args{rank}, __serial => $args{serial} ); } sub report { my ($self) = @_; print $self->name, "\n"; print $self->rank, "\n"; print $self->serial, "\n"; } sub DESTROY {} # Usually needed when using AUTOLOAD sub AUTOLOAD { my ($self) = @_; $AUTOLOAD =~ s/.*::/__/; return $self->{$AUTOLOAD}; } package main; my $id = DogTag->new(name=>"Smith", rank=>"private", serial=>1234567); $id->report();