[pm-h] Moose question

Robert Boone robo4288 at gmail.com
Sat Dec 19 19:15:11 PST 2009


You can change the line to:

$self->{_mech} = WWW::Mechanize->new();

of

$self->_mech(WWW::Mechanize->new());





On Sat, Dec 19, 2009 at 3:25 PM, Will Willis <will.willis at gmail.com> wrote:
> I'm using Moose to write a package that, among other things, connects to the
> internet to fetch some content.
> The way I have my object designed is that want one of the attributes to
> contain a reference to a WWW::Mechanize object.
> ----the code---
> #!/usr/bin/perl
> use strict;
> use Website;
> my $web = Website->new(name => 'Google', url => 'http://www.google.com/');
> print "My Website's name is " . $web->name . "\n";
> print $web->get_content();
>
> ----the class---
> package Website;
> use Moose;
> use WWW::Mechanize;
> has '_mech' => ( is => 'rw' );
> has 'name'  => ( is => 'rw', isa => 'Str', required => 1);
> has 'url'   => (is => 'rw', isa => 'Str', required => 1);
> sub get_content {
>     my $self = shift;
>     $self->_mech = WWW::Mechanize->new();
>     $self->_mech->get($self->url);
>     return $self->_mech->content;
> }
> 1;
> --- /end code --
> That's not working , I get the following output/error:
> My Website's name is Google
> Can't modify non-lvalue subroutine call at Website.pm line 11.
> Do I need to make the '_mech' attribute be a (isa) WWW::Mechanize object to
> achieve this? I have no intention of exposing any of WWW::Mechanize's
> functionality to the outside. I'm probably missing a small detail. Any help
> would be appreciated.
>
> -Will
> _______________________________________________
> Houston mailing list
> Houston at pm.org
> http://mail.pm.org/mailman/listinfo/houston
> Website: http://houston.pm.org/
>


More information about the Houston mailing list