Classes are the “cookie cutters” that build objects. Just as a module groups subroutines in a package, a class groups methods in a package. Classes can also contain subroutines, submethods, and multimethods. However, classes are significantly different from modules, primarily because they construct objects. Objects don’t just define functionality, they also hold data. In Perl 5 objects were simply hashes (or arrays, or . . . ) bestowed with special powers by bless. Perl 6 objects can still be simple blessed data structures, but the default is now an object that hides the details of its internal representation—a true opaque object.


Attributes are the data at the core of an opaque object. Other languages have called them instance variables, data members, or instance attributes. Attributes are declared with the has keyword, and generally have a “.” after the sigil:

class Heart::Gold {
    has int $.length;
    has int $.height is rw;
    has @.cargo;
    has %.crew;

Attributes aren’t directly accessible outside the class, but inside the class they act just like ordinary variables:

print $.length;
$.length = 140;

Attributes also automatically generate their own accessor method with the same name as the attribute. Accessor methods are accessible inside or outside the class. By default, accessors are read-only, but the is rw property marks an accessor as read/write.

$value = $obj.height; # returns the value of $.height
$obj.height = 90;     # sets the value of $.height


Methods ...

Get Perl 6 and Parrot Essentials, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.