Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: Moose::Role not getting params passed via ->new()

by tobyink (Canon)
on Sep 19, 2013 at 06:26 UTC ( #1054777=note: print w/replies, xml ) Need Help??

in reply to Moose::Role not getting params passed via ->new()

As derby said, $self will only be populated with keys corresponding to any attributes which have beeen defined for the class (including those defined in any roles the class does).

You could define your role like this:

package DTF::Transfer; use strict; use warnings; use Moose::Role; has [qw/ input_line dl_base_dir report_file /] => ( is => 'ro', ); sub BUILD {} after 'BUILD' => sub { my $self = shift; die scalar(keys %$self); };

More importantly, you're making the mistake of treating $self like it's a hashref. It's not. (Actually it is by default, but you're supposed to pretend it's not. Let's pretend it's not...) Because it's not a hashref, keys %$self is meaningless. Instead you should access attributes via the accessors Moose generates:

after 'BUILD' => sub { my $self = shift; printf STDERR "%s: %s\n", $_, $self->$_ for qw( input_line dl_base_dir report_file ); die; };

Lastly, have you noticed that BUILD gets passed not one argument, but two?

use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

Replies are listed 'Best First'.
Re^2: Moose::Role not getting params passed via ->new()
by italdesign (Novice) on Sep 19, 2013 at 22:04 UTC
    Thanks guys! It felt like I was missing some fundamentals. I'm glad you set me on the right path.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (7)
As of 2023-03-20 16:31 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (59 votes). Check out past polls.