use 5.010; package MyClass { use Moose; has FileName => (is => 'rw', isa => 'Str', writer => "_SetFileName"); sub SetFileName { my $self = shift; my $arg = shift; warn "I am here with $arg"; $self->_SetFileName($arg) if $arg =~ /foo/; }; }; package main { my $obj = MyClass->new; $obj->SetFileName('/bar/baz'); say "FileName is: ", $obj->FileName; $obj->SetFileName('/foo/bar'); say "FileName is: ", $obj->FileName; };