Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

NAME

Perl6::Overview::Object - Object-oriented Programming

DESCRIPTION

Basic class definition

class ClassName {
has $.public_instance_var;
# Untyped instance variable, a read-only accessor is automatically
# generated. Methods have read-write access to $.instance_var.
has $.public_instance_var is rw;
# Untyped instance variable, a read-write accessor is automatically
# generated.
has Type $.public_instance_var;
# Typed instance variable.
has $!private_instance_var;
# Private instance variable, no accessor is automatically generated.
}

Inheritance

class ParentClass {...}
class SubClass is ParentClass {...}
# or
class SubClass {
is ParentClass;
...;
}

Methods

method methodname(...) {...}
# Standard subroutine signature
method methodname($invocant: ...) {...}
# The invocant (the class or the instance) is explicitly bound to
# $invocant. In any case, there's self and $?CLASS, too.
method ^methodname(...) {...}
# Class method
method methodname(::?CLASS $self: ...) {...}
# Instance method

Roles

role RoleName {
method methodname(...) {...}
}
class SomeClass does RoleName {...}
# or
class SomeClass {
does RoleName;
}

Magical function

self # Returns the current instance

Magical variables

$?CLASS # The current class as scalar variable
::?CLASS # The current class as package variable
$?ROLE # The current role as scalar variable
::?ROLE # The current role as package variable

Subtypes

my subtype Int::Odd of Int where { $^value % 2 == 1 };
# Declaration of a new, lexical subtype of Int, allowing only odd integers.
my Int::Odd $var = 3; # valid
$var++; # invalid
my Int::Odd $var = 4; # invalid