It looks like your current code can be used just by removing the writer parameter. It looks, to me, like you are making some checks in SetFileName and then set the parameter using the standard accessor. Thus, something like this should work for you:
use 5.010;
package MyClass {
use Moose;
has FileName => (is => 'rw', isa => 'Str');
sub SetFileName {
my $self = shift;
my $arg = shift;
warn "I am here with $arg";
$self->FileName($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;
};
Though normally, if you want to force use of a custom writer you would change the default writer to start with an underscore to indicate that it should be treated as a private method (Note: treating underscore methods as private is a convention, it is not enforced):
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;
};
Also note that your custom SetFileName will not be called if FileName is passed to new(). For that you would have to do something in BUILD or else some of the other special methods or such.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.