I've read through almost all of the Moose docs I could find on CPAN and several 
of the Moose slide decks floating around the Interwebs.

That being said I have some basic questions that probably have simple answers.  
Maybe I didn't read the fine manuals closely enough, so if I did overlook 
something, please point me toward the right spot in the docs and I'll figure it 
out.

That being said here are my questions:

1) In the "old style" OO (which I have used for a long time now) I would do 
something like this:

I would make a file called "Account.pm" and try to encapsulate all of the 
functionality of accounts in that one file.

I would make another file called Server.pm and encapsulate functionality around 
servers in the other file. Then if Account and Server have a relationship, I 
would do this:

package Account;

use Server;

I found that if I do this:

package Server; # (in a file called Server.pm)
use Moose;

has 'name' => {
  is => 'ro',
  isa => 'Str',
};

# etc

package Account; # (in a file called Account.pm)
use Moose;
use Server;

has 'server' => {
  is => 'ro',
  isa => 'Server',
};

perl -wc Account.pm throws an error

but if I change "use" to "require Server;" I do not get an error.

Why doesn't use work?

2) Maybe I haven't really grokked the Moose Way yet, but what's the best way to 
implement a collection of Moose Objects?

In the old style OO, I would implement an object as, say, Account.pm and then I 
would create a collection class of that object type called XXXCollection or 
AccountCollection.pm in this case.  I usually stored individual objects as a 
hash of hashes, using the object name as the key.

I suspect that Roles and Traits can help me write a Collection class trivially 
where I will get a lot of functionality "for free" but I'm just not quite sure 
I understand the docs well enough to put it all together.

Thanks for any help/pointers.

--Mark

Mark Allen

Reply via email to