#!/usr/bin/perl use strict; package Foo; sub new{ my $class = shift; my $self = { bar=>"" }; bless $self,$class; } sub bar : lvalue { my $self = shift; if (@_) { # validate my $value = shift; if (ref($value)) { die "foo->bar must not be a reference!\n"; } $self->{bar}=$value; } $self->{bar} } package main; my $test = Foo->new; # Use lvalue assignment $test->bar = "Hello"; print $test->bar."\n"; # Use setter mode to verify data $test->bar("There"); print $test->bar."\n"; # Use setter mode to verify data $test->bar($test); print $test->bar."\n"; __OUTPUT__ Hello There foo->bar must not be a reference!