I'm no Ruby expert, but I think you're misinterpreting the example in the book. @@population is a "class attribute", not an object attribute. In other words, it's a property of the "Person" class; not a property of each Person.
Using Moose you could model it along these lines:
package Person {
use Moose;
use MooseX::ClassAttribute;
has name => (is => 'ro', isa => 'Str');
class_has population => (is => 'ro', isa => 'ArrayRef');
}
my $bob = Person->new(name => "Robert");
push @{ Person->population }, $bob;
Though there are many reasons to avoid class attributes. (Basically think of all the good reasons to avoid global variables, and then s/global variables/class attributes/gi.)
package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name