sub new { my ($thing) = @_ ; my $class = ( ref($thing) or $thing ) ; my $self = bless({}, $class) ; $self->{'errMsg'} = ""; # module user can set this e.g. to sub { carp($_[0]->{'errMsg'}) } or something: $self->{'errHandler'}; return $self ; } # Sets an error message, calls the error Handler, always returns undef sub raiseError { my ($self, $string) = @_; $self->{'errMsg'} = $string; &{$self->{'errHandler'}}($self) if $self->{'errHandler'}; return; } # returns error message and resets it to "" sub error { my ($self) = @_; my $msg = $self->{'errMsg'}; $self->{'errMsg'} = ""; return $msg; } # ... sub foo { my ($self) = @_; # do stuff if ($trouble) { return raiseError("foo: cannot do thisandthat"); } # no error: # make sure to return true-evaluating or at least non-undef value return 1; }