Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^3: Perl/Moose calling writer doesnt work

by duelafn (Parson)
on Mar 10, 2018 at 18:48 UTC ( [id://1210631]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Perl/Moose calling writer doesnt work
in thread Perl/Moose calling writer doesnt work

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.

Good Day,
    Dean

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1210631]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (2)
As of 2024-04-24 23:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found