package Kreis::Prot; use strict; use warnings; use Carp 'croak'; sub TIESCALAR{ my $class = shift; my $ref = shift; bless \$ref, $class; } sub FETCH{ my $self = shift; return $$self; } sub STORE{ my $self = shift; croak "Das Attribut ist schreibgeschützt!"; } ######################################### package Kreis; use strict; use warnings; sub new{ my $class = shift; my $self = bless{pi => 3.14}, $class; tie $self->{pi}, 'Kreis::Prot', $self->{pi}; return $self; } sub umfang{ my $self = shift; my %gegeben = ( radius => 0, durchm => 0, @_); return $gegeben{radius} ? 2 * $self->{pi} * $gegeben{radius} : $self->{pi} * $gegeben{durchm}; } ######################################### package main; use strict; use warnings; my $k = Kreis->new; print $k->umfang(radius => 10); # Versuch ein schreibgeschütztes Attribut zu beschreiben $k->{pi} = 123; # Fehlermeldung