class Match
Result of a successful regex match
class Match is Capture is Cool { ... }
Match objects are the result of a successful regex match. They store a reference to the original string (.orig), positional and named captures, the positions of the start and end of the match in the original string, and a payload referred to as AST (abstract syntax tree), which can be used to build data structures from complex regexes and grammars.
Submatches are also Match objects (or lists of Match objects, if the corresponding regex was quantified), so each match object can be seen as the root of a tree of match objects.
Methods
method orig
Returns the original string that the regex was matched against.
method from
Returns the index of the starting position of the match.
method to
Returns the index of the end position of the match.
method made
Returns the payload that was set with method make.
method ast
Alias for method made.
method Str
Returns the matched text.
method caps
Returns a list of pairs, with the index or submatch name as key and the submatches as values. The list is ordered by starting position of the submatches.
method chunks
Returns a list of pairs, with the index or submatch name as key and the submatches as values. The list is ordered by starting position of the submatches.
Those parts of the string that were not matched by submatches are interleaved with the other pairs, with the string ~ as key.
method list
Returns a list of positional submatches.
method hash
Returns a hash of named submatches.
method prematch
Returns the part of the original string leading up to the match.
method postmatch
Returns the part of the original string following the match.
method make
method make(Match:D: Mu $ast)
Sets the AST to $ast, and returns it.
This is just a little sugar for $/.made = $ast which is a very common operation in actions. $ast may be anything that makes sense for the use case. It's typically some tree node.
Type graph
Below you should see a clickable image showing the type relations for Match that links to the documentation pages for the related types. If not, try the PNG version instead.
Routines supplied by class Capture
Match inherits from class Capture, which provides the following methods:
method list
Defined as:
method list(Capture:D:) returns Positional
Usage:
CAPTURE.list
Returns the positional part of the Capture.
method hash
Defined as:
method hash(Capture:D:) returns Associative
Usage:
CAPTURE.hash
Returns the named/hash part of the Capture.
method elems
Defined as:
method elems(Capture:D:) returns Int:D
Usage:
CAPTURE.elems
Returns the number of positional elements in the Capture.
Routines supplied by class Cool
Match inherits from class Cool, which provides the following methods:
routine abs
Defined as:
sub abs(Numeric() $x)
method abs()
Usage:
abs NUMERIC
NUMERIC.abs
Coerces the invocant (or in the sub form, the argument) to Numeric and returns the absolute value (that is, a non-negative number).
say (-2).abs; # 2
say abs "6+8i"; # 10
method conj
Defined as:
method conj()
Usage:
NUMERIC.conj
Coerces the invocant to Numeric and returns the complex conjugate (that is, the number with the sign of the imaginary part negated).
say (1+2i).conj; # 1-2i
routine sqrt
Defined as:
sub sqrt(Numeric(Cool) $x)
method sqrt()
Usage:
sqrt NUMERIC
NUMERIC.sqrt
Coerces the invocant to Numeric (or in the sub form, the argument) and returns the square root, that is, a non-negative number that, when multiplied with itself, produces the original number.
say 4.sqrt; # 2
say sqrt(2); # 1.4142135623731
method sign
Defined as:
method sign()
Usage:
NUMERIC.sign
Coerces the invocant to Numeric and returns its sign, that is, 0 if the number is 0, 1 for positive and -1 for negative values.
say 6.sign; # 1
say (-6).sign; # -1
say "0".sign; # 0
method rand
Defined as:
method rand()
Usage: NUMERIC.rand
Coerces the invocant to Num and returns a pseudo-random value between zero and the number.
say 1e5.rand; # 33128.495184283
routine sin
Defined as:
sub sin(Numeric(Cool))
method sin()
Usage:
sin NUMERIC
NUMERIC.sin
Coerces the invocant (or in the sub firm, the argument) to Numeric, interprets it as radians, returns its sine.
say sin(0); # 0
say sin(pi/4); # 0.707106781186547
say sin(pi/2); # 1
Note that Perl 6 is no computer algebra system, so sin(pi) typically does not produce an exact 0, but rather a very small floating-point number.
routine asin
Defined as:
sub asin(Numeric(Cool))
method asin()
Usage:
asin NUMERIC
NUMERIC.asin
Coerces the invocant (or in the sub firm, the argument) to Numeric, and returns its arc-sine in radians.
say 0.1.asin; # 0.10016742116156
routine cos
Defined as:
sub cos(Numeric(Cool))
method cos()
Usage:
cos NUMERIC
NUMERIC.cos
Coerces the invocant (or in sub form, the argument) to Numeric, interprets it as radians, returns its cosine.
say 0.cos; # 1
say pi.cos; # -1
say cos(pi/2); # 6.12323399573677e-17
routine acos
Defined as:
sub acos(Numeric(Cool))
method acos()
Usage:
acos NUMERIC
NUMERIC.acos
Coerces the invocant (or in sub form, the argument) to Numeric, and returns its arc-cosine in radians.
routine tan
Defined as:
sub tan(Numeric(Cool))
method tan()
Usage:
tan NUMERIC
NUMERIC.tan
Coerces the invocant (or in sub form, the argument) to Numeric, interprets it as radians, returns its tangens.
routine atan
Defined as:
sub atan(Numeric(Cool))
method atan()
Usage:
atan NUMERIC
NUMERIC.atan
Coerces the invocant (or in sub form, the argument) to Numeric, and returns its arc-tangens in radians.
routine atan2
Defined as:
sub atan2(Numeric() $x, Numeric() $y = 1e0)
method atan2($y = 1e0)
Usage:
atan2 NUMERIC, NUMERIC?
NUMERIC.atan2(NUMERIC?)
Coerces the arguments (including the invocant in the method form) to Numeric, and returns their two-argument arc-tangens in radians.
method sec
Defined as:
sub sec(Numeric(Cool))
method sec()
Usage:
sec NUMERIC
NUMERIC.sec
Coerces the invocant (or in sub form, its argument) to Numeric, interprets it as radians, returns its secans, that is, the reciprocal of its cosine.
routine asec
Defined as:
sub asec(Numeric(Cool))
method asec()
Usage:
asec NUMERIC
NUMERIC.asec
Coerces the invocant (or in sub form, its argument) to Numeric, and returns its arc-secans in radians.
routine cosec
Defined as:
sub cosec(Numeric(Cool))
method cosec()
Usage:
cosec NUMERIC
NUMERIC.cosec
Coerces the invocant (or in sub form, its argument) to Numeric, interprets it as radians, returns its cosecans, that is, the reciprocal of its sine.
routine acosec
Defined as:
sub acosec(Numeric(Cool))
method acosec()
Usage:
acosec NUMERIC
NUMERIC.acosec
Coerces the invocant (or in sub form, its argument) to Numeric, and returns its arc-cosecans in radians.
routine cotan
Defined as:
sub cotan(Numeric(Cool))
method cotan()
Usage:
cotan NUMERIC
NUMERIC.cotan
Coerces the invocant (or in sub form, its argument) to Numeric, interprets it as radians, returns its cotangens, that is, the reciprocal of its tangens.
routine acotan
Defined as:
sub acotan(Numeric(Cool))
method acotan()
Usage:
acotan NUMERIC
NUMERIC.acotan
Coerces the invocant (or in method form, its argument) to Numeric, and returns its arc-cotangens in radians.
routine sinh
Defined as:
sub sinh(Numeric(Cool))
method sinh()
Usage:
sinh NUMERIC
NUMERIC.sinh
Coerces the invocant (or in method form, its argument) to Numeric, and returns its Sine hyperbolicus.
routine asinh
Defined as:
sub asinh(Numeric(Cool))
method asinh()
Usage:
asinh NUMERIC
NUMERIC.asinh
Coerces the invocant (or in method form, its argument) to Numeric, and returns its Inverse Sine hyperbolicus.
routine cosh
Defined as:
sub cosh(Numeric(Cool))
method cosh()
Usage:
cosh NUMERIC
NUMERIC.cosh
Coerces the invocant (or in method form, its argument) to Numeric, and returns its Cosine hyperbolicus.
routine acosh
Defined as:
sub acosh(Numeric(Cool))
method acosh()
Usage:
acosh NUMERIC
NUMERIC.acosh
Coerces the invocant (or in method form, its argument) to Numeric, and returns its Inverse Cosine hyperbolicus.
routine tanh
Defined as:
sub tanh(Numeric(Cool))
method tanh()
Usage:
tanh NUMERIC
NUMERIC.tanh
Coerces the invocant (or in method form, its argument) to Numeric, and returns its Tangens hyperbolicus.
routine atanh
Defined as:
sub atanh(Numeric(Cool))
method atanh()
Usage:
atanh NUMERIC
NUMERIC.atanh
Coerces the invocant (or in method form, its argument) to Numeric, and returns its Inverse tangens hyperbolicus.
routine log
Defined as:
Defined as:
multi sub log(Numeric(Cool) $number, Numeric(Cool) $base?)
multi method log(Cool:D: Cool:D $base?)
Usage:
log NUMERIC, NUMERIC?
NUMERIC.log(NUMERIC?)
Coerces the arguments (including the invocant in the method form) to Numeric, and returns its Logarithm to base $base, or to base e (Euler's Number) if no base was supplied (Natural logarithm.
say (e*e).log; # 2
routine log10
Defined as:
multi sub log10(Cool(Numeric))
multi method log10()
Usage:
log10 NUMERIC
NUMERIC.log10
Coerces the invocant (or in the sub form, the invocant) to Numeric, and returns its Logarithm to base 10, that is, a number that approximately produces the original number when raised to the power of 10.
say log10(1001); # 3.00043407747932
method exp
Defined as:
multi sub exp(Cool:D $pow, Cool:D $base?)
multi method exp(Cool:D: Cool:D $base?)
Usage:
exp NUMERIC, NUMERIC?
NUMERIC.exp(NUMERIC?)
Coerces the arguments (including the invocant in the method from) to Numeric, and returns $base raised to the power of the first number. If no $base is supplied, e (Euler's Number) is used.
say 0.exp; # 1
say 1.exp; # 2.71828182845905
say 10.exp; # 22026.4657948067
routine round
Defined as:
multi sub round(Numeric(Cool))
multi method round(Cool:D: $unit = 1)
Usage:
round NUMERIC, NUMERIC?
NUMERIC.round(NUMERIC?)
Coerces the invocant (or in sub form, its argument) to Numeric, and rounds it to the unit of $unit. If $unit is 1, rounds to the nearest integer.
say 1.7.round; # 2
say 1.07.round(0.1); # 1.1
say 21.round(10); # 20
routine floor
Defined as:
multi sub floor(Numeric(Cool))
multi method floor
Usage:
floor NUMERIC
NUMERIC.floor
Coerces the invocant (or in sub form, its argument) to Numeric, and rounds it downwards to the nearest integer.
say "1.99".floor; # 1
say "-1.9".floor; # -2
say 0.floor; # 0
routine ceiling
Defined as:
multi sub ceiling(Numeric(Cool))
multi method ceiling
Usage:
ceiling NUMERIC
NUMERIC.ceiling
Coerces the invocant (or in sub form, its argument) to Numeric, and rounds it upwards to the nearest integer.
say "1".ceiling; # 1
say "-0.9".ceiling; # 0
say "42.1".ceiling; # 43
routine truncate
Defined as:
multi sub truncate(Numeric(Cool))
multi method truncate()
Usage:
truncate NUMERIC
NUMERIC.truncate
Coerces the invocant (or in sub form, its argument) to Numeric, and rounds it towards zero.
say 1.2.truncate # 1
say truncate -1.2; # -1
routine ord
Defined as:
sub ord(Str(Cool))
method ord()
Usage:
ord STRING
STRING.ord
Coerces the invocant (or in sub form, its argument) to Str, and returns the Unicode code point, number of the code point.
say 'a'.ord; # 65
The inverse operation is chr.
Mnemonic: returns an ordinal number
routine chr
Defined as:
sub chr(Int(Cool))
method chr()
Usage:
chr INTEGER
INTEGER.chr
Coerces the invocant (or in sub form, its argument) to Int, interprets it as a Unicode code points, and returns a string made of that code point.
say '65'.chr; # A
The inverse operation is ord.
Mnemonic: turns an integer into a character.
routine chars
Defined as:
sub chars(Str(Cool))
method chars()
Usage:
chars STRING
STRING.chars
Coerces the invocant (or in sub form, its argument) to Str, and returns the number of characters in the string. Characters should actually be grapheme clusters, though current implementations erroneously count codepoints instead.
say 'møp'.chars; # 3
routine codes
Defined as:
sub codes(Str(Cool))
method codes()
Usage:
codes STRING
STRING.codes
Coerces the invocant (or in sub form, its argument) to Str, and returns the number of Unicode code points.
say 'møp'.codes; # 3
routine flip
Defined as:
sub flip(Str(Cool))
method flip()
Usage:
flip STRING
STRING.flip
Coerces the invocant (or in sub form, its argument) to Str, and returns a reversed version.
say 421.flip; # 124
routine trim
Defined as:
sub trim(Str(Cool))
method trim()
Usage:
trim STRING
STRING.trim
Coerces the invocant (or in sub form, its argument) to Str, and returns the string with both leading and trailing whitespace stripped.
my $stripped = ' abc '.trim;
say "<$stripped>"; # <abc>
routine trim-leading
Defined as:
sub trim-leading(Str(Cool))
method trim-leading()
Usage:
trim-leading STRING
STRING.trim-leading
Coerces the invocant (or in sub form, its argument) to Str, and returns the string with leading whitespace stripped.
my $stripped = ' abc '.trim-leading;
say "<$stripped>"; # <abc >
routine trim-trailing
Defined as:
sub trim-trailing(Str(Cool))
method trim-trailing()
Usage:
trim-trailing STRING
STRING.trim-trailing
Coerces the invocant (or in sub form, its argument) to Str, and returns the string with trailing whitespace stripped.
my $stripped = ' abc '.trim-trailing;
say "<$stripped>"; # < abc>
routine lc
Defined as:
sub lc(Str(Cool))
method lc()
Usage:
lc STRING
STRING.lc
Coerces the invocant (or in sub form, its argument) to Str, and returns it case-folded to lower case.
say "ABC".lc; # abc
routine uc
Defined as:
sub uc(Str(Cool))
method uc()
Usage:
uc STRING
STRING.uc
Coerces the invocant (or in sub form, its argument) to Str, and returns it case-folded to upper case (capital letters).
say "Abc".uc; # ABC
routine tc
Defined as:
sub tc(Str(Cool))
method tc()
Usage:
tc STRING
STRING.tc
Coerces the invocant (or in sub form, its argument) to Str, and returns it with the first letter case-folded to title case (or where not available, upper case).
say "abC".tc; # AbC
routine tclc
Defined as:
sub tclc(Str(Cool))
method tclc()
Usage:
tclc STRING
STRING.tclc
Coerces the invocant (or in sub form, its argument) to Str, and returns it with the first letter case-folded to title case (or where not available, upper case), and the rest of the string case-folded to lower case..
say 'abC'.tclc; # Abc
routine wordcase
Defined as:
sub wordcase(Str(Cool) $input, :&filter = &tclc, Mu :$where = True)
method wordcase(:&filter = &tclc, Mu :$where = True)
Usage:
wordcase STRING, FILTER?, WHERE?
STRING.wordcase(FILTER?, WHERE?)
Coerces the invocant (or in sub form, the first argument) to Str, and filters each word that smart-matches against $where through the &filter. With the default filter (first character to upper case, rest to lower) and matcher (which accepts everything), this title-cases each word:
say "perl 6 programming".wordcase; # Perl 6 Programming
With a matcher:
say "have fun working on perl".wordcase(:where({ .chars > 3 }));
# Have fun Working on Perl
With a customer filter too:
say "have fun working on perl".wordcase(:filter(&uc), :where({ .chars > 3 }));
# HAVE fun WORKING on PERL
routine uniname
Defined as:
sub uniname(Str(Cool) returns Str
method uniname() returns Str
Usage:
# Camelia in Unicode
say ‘»ö«’.comb».uniname;
# «("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK",
"LATIN SMALL LETTER O WITH DIAERESIS", "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK")»
# Find the char with the longest Unicode name.
say (0..0x1FFFF).sort(*.uniname.chars)[*-1].chr.uniname;
# «ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM»
Interprets the invocant / first argument as a /type/Str, and returns the Unicode codepoint name of the first character. To convert a whole string use uninames.
routine uninames
Defined as:
sub uninames(Str:D)
method uninames()
Usage:
dd ‘»ö«’.comb».uniname;
# «("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK",
"LATIN SMALL LETTER O WITH DIAERESIS",
"LEFT-POINTING DOUBLE ANGLE QUOTATION MARK").Seq»
Returns of a Seq of unicode names for the Str provided.
routine chop
Defined as:
sub chop(Str(Cool))
method chop()
Usage:
chop STRING
STRING.chop
Coerces the invocant (or in sub form, its argument) to Str, and returns it with the last character removed.
say 'perl'.chop; # per
routine chomp
Defined as:
sub chomp(Str(Cool))
method chomp()
Usage:
chomp STRING
STRING.chomp
Coerces the invocant (or in sub form, its argument) to Str, and returns it with the last character removed, if it is a logical newline.
say 'ab'.chomp.chars; # 2
say "a\n".chomp.chars; # 1
routine substr
Defined as:
sub substr(Str(Cool) $str, $from, $chars?)
method substr($from, $chars?)
Usage:
substr(STRING, FROM, CHARS?)
STRING.substr(FROM, CHARS?)
Coerces the invocant (or in the sub form, the first argument) to Str, and returns the string starting from offset $from. If $chars is supplied, at most $chars characters are returned.
say 'zenith'.substr(2); # nith
say 'zenith'.substr(0, 3); # zen
# works on non-strings too:
say 20151224.substr(6); # 24
# sub form:
say substr "zenith", 0, 3; # zen
If the $from parameter is a Callable, it is called with the number of chars in the string as argument. This allows easy indexing relative to the end:
say 20151224.substr(*-2); # 24
routine ords
Defined as:
sub ords(Str(Cool) $str)
method ords()
Usage:
ords(STRING)
STRING.ords
Coerces the invocant (or in the sub form, the first argument) to Str, and returns a list of Unicode codepoints for each character.
say "Perl 6".ords; # 80 101 114 108 32 54
say ords 10; # 49 48
This is the list-returning version of ord. The inverse operation in chrs.
routine chrs
Defined as:
sub chrs(*@codepoints) return Str:D
method chrs()
Usage:
chrs LIST
LIST.chrs
Coerces the invocant (or in the sub form, the argument list) to a list of integers, and returns the string created by interpreting each integer as a Unicode codepoint, and joining the characters.
say <80 101 114 108 32 54>.chrs; # Perl 6
This is the list-input version of chr. The inverse operation is ords.
routine split
Defined as:
multi sub split( Str:D $delimiter, Str(Cool) $input, $limit = Inf, :$k, :$v, :$kv, :$p, :$skip-empty)
multi sub split(Regex:D $delimiter, Str(Cool) $input, $limit = Inf, :$k, :$v, :$kv, :$p, :$skip-empty)
multi method split( Str:D $delimiter, $limit = Inf, :$k, :$v, :$kv, :$p, :$skip-empty)
multi method split(Regex:D $delimiter, $limit = Inf, :$k, :$v, :$kv, :$p, :$skip-empty)
Usage:
split DELIMITER, STRING, LIMIT?, [:k | :v | :kv | :p]?, :skip-empty?
split /PATTERN/, STRING, LIMIT?, [:k | :v | :kv | :p]?, :skip-empty?
STRING.split(DELIMITER, LIMIT?, [:k | :v | :kv | :p]?, :skip-empty?)
STRING.split(/PATTERN/, LIMIT?, [:k | :v | :kv | :p]?, :skip-empty?)
Coerces the invocant (or in the sub form, the second argument) to Str, and splits it into pieces based on delimiters found in the string.
If $delimiter is a string, it is searched for literally and not treated as a regex.
say split(';', "a;b;c").perl; # ("a", "b", "c").list
say split(';', "a;b;c", 2).perl; # ("a", "b;c").list
say split(';', "a;b;c,d").perl; # ("a", "b", "c,d").list
say split(/\;/, "a;b;c,d").perl; # ("a", "b", "c,d").list
say split(/<[;,]>/, "a;b;c,d").perl; # ("a", "b", "c", "d").list
By default, split omits the matches, and returns a list of only those parts of the string that did not match. Specifying one of the :k, :v, :kv, :p adverbs changes that. Think of the matches as a list that is interleaved with the non-matching parts. :v interleaves the values of that list: s say 'abc'.split(/b/, :v); # (a 「b」 c)
:k interleaves the keys, that is, the indexes:
say 'abc'.split(/b/, :k); # (a 0 c)
:kv adds both indexes and matches:
say 'abc'.split(/b/, :v); # (a 0 「b」 c)
You can only use one of the :k, :v, :kv, :p adverbs in a single call to split.
and :p adds them as Pairs:
say 'abc'.split(/b/, :p) # (a 0 => 「b」 c)
Note that unlike in Perl 5, empty chunks are not removed from the result list. For that behavior, use the `:skip-empty` named argument:
say ("f,,b,c,d".split: /","/ ).perl # ("f", "", "b", "c", "d")
say ("f,,b,c,d".split: /","/, :skip-empty).perl # ("f", "b", "c", "d")
See also: comb.
routine lines
Defined as:
sub lines(Str(Cool))
method lines()
Usage:
lines STRING
STRING.lines
Coerces the invocant (and in sub form, the argument) to Str, decomposes it into lines (with the newline characters stripped), and returns the list of lines.
say lines("a\nb\n").join('|'); # a|b
say "some\nmore\nlines".lines.elems; # 3
This method can be used as part of an IO::Path to process a file line-by-line, since IO::Path objects inherit from Cool, e.g.:
for 'huge-csv'.IO.lines -> $line {
# Do something with $line
}
# or if you'll be processing later
my @lines = 'huge-csv'.IO.lines;
method words
Defined as:
method words(Int() $limit)
Usage:
INTEGER.words(LIMIT?)
Coerces the invocant to Str, and returns a list of words that make up the string (and if $limit is supplied, only the first $limit words).
say 'The quick brown fox'.words.join('|'); # The|quick|brown|fox
say 'The quick brown fox'.words(2).join('|'); # The|quick
Only whitespace counts as word boundaries
say "isn't, can't".words.join('|'); # isn't,|can't
routine comb
Defined as:
multi sub comb(Regex $matcher, Str(Cool) $input, $limit = *) returns List:D
multi method comb(Regex $matcher, $limit = *) returns List:D
Usage:
comb /PATTERN/, STRING, LIMIT?
STRING.comb(/PATTERN/, LIMIT?)
Returns all (or if supplied, at most $limit) matches of the invocant (method form) or the second argument (sub form) against the Regex as a list of strings.
say "6 or 12".comb(/\d+/).join(", "); # 6, 12
routine index
Defined as:
multi sub index(Str(Cool) $s, Str:D $needle, Int(Cool) $startpos = 0) returns Int
multi method index(Str(Cool) $needle, Int(Cool) $startpos = 0) returns Int
Usage:
index STRING, NEEDLE, STARTPOS?
STRING.comb(NEEDLE, STARTPOS?)
Coerces the first two arguments (in method form, also counting the invocant) to Str, and searches for $needle in the string starting from $startpos. It returns the offset into the string where $needle was found, and an undefined value if it was not found.
See the documentation in type Str for examples.
routine rindex
Defined as:
multi sub rindex(Str(Cool) $haystack, Str(Cool) $needle, Int(Cool) $startpos = $haystack.chars)
multi method rindex(Str(Cool) $haystack: Str(Cool) $needle, Int(Cool) $startpos = $haystack.chars)
Usage:
rindex STRING, NEEDLE, STARTPOS?
STRING.rindex(NEEDLE, STARTPOS?)
Coerces the first two arguments (including the invocant in method form) to Str and $startpos to Int, and returns the last position of $needle in $haystack not after $startpos. Returns an undefined value if $needle wasn't found.
See the documentation in type Str for examples.
routine roots
Defined as:
multi sub roots(Numeric(Cool) $x, Int(Cool) $n)
multi method roots(Int(Cool) $n)
Usage:
roots NUMERIC, INTEGER
NUMERIC.roots(INTEGER)
Coerces the first argument (and in method form, the invocant) to Numeric and the second ($n) to Int, and produces a list of $n Complex $n-roots, which means numbers that, raised to the $nth power, approximately produce the original number.
For example
my $original = 16;
my @roots = $original.roots(4);
say @roots;
for @roots -> $r {
say abs($r ** 4 - $original);
}
produces this output:
2+0i 1.22464679914735e-16+2i -2+2.44929359829471e-16i -3.67394039744206e-16-2i
1.77635683940025e-15
4.30267170434156e-15
8.03651692704705e-15
1.04441561648202e-14
method IO
Defined as:
method IO() returns IO::Path:D
Usage:
EXPR.IO
Coerces the invocant to IO::Path.
.say for '.'.IO.dir; # gives a directory listing
routine EVAL
Defined as:
sub EVAL(Cool $code, :$lang = { ... })
Usage:
EVAL "say 'hello'";
Coerces the invocant to Str.
This works as-is with a literal string parameter. If you have a more complex input, such as a variable or string with embedded code, you must enable the MONKEY-SEE-NO-EVAL pragma:
use MONKEY-SEE-NO-EVAL;
EVAL "say { 5 + 5 }";
Symbols in the current lexical scope are visible to code in an EVAL.
my $answer = 42;
EVAL 'say $answer;'; # says 42
However, since the set of symbols in a lexical scope is immutable after compile time, an EVAL can never introduced symbols into the surrounding scope.
EVAL 'my $lives = 9'; say $lives; # error, $lives not declared
Furthermore, the EVAL is evaluated in the current package:
module M {
EVAL 'our $answer = 42'
}
say $M::answer; # says 42
And also the current language, meaning any added syntax is available:
sub infix:<mean>(*@a) is assoc<list> {
@a.sum / @a.elems
}
EVAL 'say 2 mean 6 mean 4'; # says 4
An EVAL statement evaluates to the result of the last statement:
say EVAL 'say 1; 2 mean 6 mean 4'; # says 1, then says 4
EVAL is also a gateway for executing code in other languages:
EVAL "use v5.20; say 'Hello from perl5!'", :lang<Perl5>;
routine EVALFILE
Defined as:
sub EVALFILE(Cool $filename, :$lang = { ... })
Usage:
EVALFILE "foo.p6";
Slurps the specified file and evaluates it. Behaves the same way as EVAL with regard to both scoping and the $lang parameter. Evaluates to the value produced by the final statement in the file.
Routines supplied by class Any
Match inherits from class Any, which provides the following methods:
method ACCEPTS
Defined as:
multi method ACCEPTS(Any:D: Mu $other)
Usage:
EXPR.ACCEPTS(EXPR);
Returns True if $other === self (i.e. it checks object identity).
Many built-in types override this for more specific comparisons
method any
Defined as:
method any() returns Junction:D
Usage:
LIST.any
Interprets the invocant as a list and creates an any-Junction from it.
say so 2 == <1 2 3>.any; # True
say so 5 == <1 2 3>.any; # False
method all
Defined as:
method all() returns Junction:D
Usage:
LIST.all
Interprets the invocant as a list and creates an all-Junction from it.
say so 1 < <2 3 4>.all; # True
say so 3 < <2 3 4>.all; # False
method one
Defined as:
method one() returns Junction:D
Usage:
LIST.one
Interprets the invocant as a list and creates an one-Junction from it.
say so 1 == (1, 2, 3).one; # True
say so 1 == (1, 2, 1).one; # False
method none
Defined as:
method none() returns Junction:D
Usage:
LIST.none
Interprets the invocant as a list and creates an none-Junction from it.
say so 1 == (1, 2, 3).none; # False
say so 4 == (1, 2, 3).none; # True
method list
Interprets the invocant as a list, and returns that List.
say 42.list.^name; # List
say 42.list.elems; # 1
method push
The method push is defined for undefined invocants and allowes to autovivify undefined to an empty Array, unless the undefined value implements Positional already. The argument provided will then be pushed into the newly created Array.
my %h;
dd %h<a>; # Any (and therefor undefined)
%h<a>.push(1); # .push on Any
dd %h; # «Hash %h = {:a($[1])}» # please not the Array
routine reverse
Defined as:
multi sub reverse(*@list ) returns List:D
multi method reverse(List:D:) returns List:D
Usage:
reverse(LIST)
LIST.reverse
Returns a list with the same elements in reverse order.
Note that reverse always refers to reversing elements of a list; to reverse the characters in a string, use flip.
Examples:
say <hello world!>.reverse # world! hello
say reverse ^10 # 9 8 7 6 5 4 3 2 1 0
method sort
Sorts iterables with infix:<cmp> or given code object.
Examples:
say <b c a>.sort; # a b c
say 'bca'.comb.sort.join; # abc
say 'bca'.comb.sort({$^b cmp $^a}).join; # cba
say '231'.comb.sort(&infix:«<=>»).join; # 123
method flat
Interprets the invocant as a list, flattens it, and returns that list. Please note that .flat will not solve the halting problem for you. If you flat an infinite list .flat may return that infinite list, eating all your RAM in the process. Further, say is not a good way to test lists because it will truncate after 100 elements.
say ((1, 2), (3)).elems; # 2
say ((1, 2), (3)).flat.elems; # 3
method eager
Interprets the invocant as a list, evaluates it eagerly, and returns that list.
say (1..10).eager; # 1 2 3 4 5 6 7 8 9 10
method elems
Interprets the invocant as a list, and returns the number of elements in the list.
say 42.elems; # 1
say <a b c>.elems; # 3
method end
Interprets the invocant as a list, and returns the last index of that list.
say 6.end; # 0
say <a b c>.end; # 2
method pairup
method pairup() returns List
Interprets the invocant as a list, and constructs a list of pairs from it, in the same way that assignment to a Hash does. That is, it takes two consecutive elements and constructs a pair from them, unless the item in the key position already is a pair (in which case the pair is passed is passed through, and the next list item, if any, is considered to be a key again).
say (a => 1, 'b', 'c').pairup.perl; # ("a" => 1, "b" => "c").list
sub exit
sub exit(Int() $status = 0)
Exits the current process with return code $status.
Routines supplied by class Mu
Match inherits from class Mu, which provides the following methods:
routine defined
multi sub defined(Mu) returns Bool:D
multi method defined() returns Bool:D
Returns False on the type object, and True otherwise.
say Int.defined; # False
say 42.defined; # True
Very few types (like Failure) override defined to return False even for instances:
sub fails() { fail 'oh noe' };
say fails().defined; # False
routine Bool
multi sub Bool(Mu) returns Bool:D
multi method Bool() returns Bool:D
Returns False on the type object, and True otherwise.
Many built-in types override this to be False for empty collections, the empty string or numerical zeros
say Mu.Bool; # False
say Mu.new.Bool; # True
say [1, 2, 3].Bool; # True
say [].Bool; # False
say { 'hash' => 'full'}.Bool; # True
say {}.Bool; # False
method Str
multi method Str() returns Str
Returns a string representation of the invocant, intended to be machine readable. Method Str warns on type objects, and produces the empty string.
say Mu.Str; #!> use of uninitialized value of type Mu in string context
routine gist
multi sub gist(Mu) returns Str
multi method gist() returns Str
Returns a string representation of the invocant, optimized for fast recognition by humans.
The default gist method in Mu re-dispatches to the perl method for defined invocants, and returns the type name in parenthesis for type object invocants. Many built-in classes override the case of instances to something more specific that may truncate output.
gist is the method that say calls implicitly, so say $something and say $something.gist generally produce the same output.
say Mu.gist; # (Mu)
say Mu.new.gist; # Mu.new()
routine perl
multi sub perl(Mu) returns Str
multi method perl() returns Str
Returns a Perlish representation of the object (i.e., can usually be re-evaluated with EVAL to regenerate the object). The exact output of perl is implementation specific, since there are generally many ways to write a Perl expression that produces a particular value
method clone
method clone(*%twiddles)
Creates a shallow clone of the invocant. If named arguments are passed to it, their values are used in every place where an attribute name matches the name of a named argument.
class Point2D {
has ($.x, $.y);
multi method gist(Point2D:D:) {
"Point($.x, $.y)";
}
}
my $p = Point2D.new(x => 2, y => 3);
say $p; # Point(2, 3)
say $p.clone(y => -5); # Point(2, -5)
method new
multi method new(*%attrinit)
Default method for constructing (create + initialize) new objects of a class. This method expects only named arguments which are then used to initialize attributes with accessors of the same name.
Classes may provide their own new method to override this default.
new triggers an object construction mechanism that calls submethods named BUILD in each class of an inheritance hierarchy, if they exist. See the documentation on object construction for more information.
method bless
method bless(*%attrinit) returns Mu:D
Lower-level object construction method than new.
Creates a new object of the same type as the invocant, uses the named arguments to initialize attributes, and returns the created object.
You can use this method when writing custom constructors:
class Point {
has $.x;
has $.y;
multi method new($x, $y) {
self.bless(:$x, :$y);
}
}
my $p = Point.new(-1, 1);
(Though each time you write a custom constructor, remember that it makes subclassing harder).
method CREATE
method CREATE() returns Mu:D
Allocates a new object of the same type as the invocant, without initializing any attributes.
say Mu.CREATE.defined; # True
method print
multi method print() returns Bool:D
Prints value to $*OUT after stringification using .Str method without adding a newline at end.
"abc\n".print; # abc
method put
multi method put() returns Bool:D
Prints value to $*OUT after stringification using .Str method adding a newline at end.
"abc".put; # abc
method say
multi method say() returns Bool:D
Prints value to $*OUT after stringification using .gist method with newline at end. To produce machine readable output use .put.
say 42; # 42
method ACCEPTS
multi method ACCEPTS(Mu:U: $other)
ACCEPTS is the method that smart matching with the infix ~~ operator and given/when invokes on the right-hand side (the matcher).
The Mu:U multi performs a type check. Returns True if $other conforms to the invocant (which is always a type object or failure).
say 42 ~~ Mu; # True
say 42 ~~ Int; # True
say 42 ~~ Str; # False
Note that there is no multi for defined invocants; this is to allow autothreading of junctions, which happens as a fallback mechanism when no direct candidate is available to dispatch to.
method WHICH
multi method WHICH() returns ObjAt:D
Returns an object of type ObjAt which uniquely identifies the object. Value types override this method which makes sure that two equivalent objects return the same return value from WHICH.
say 42.WHICH eq 42.WHICH; # True
method WHERE
method WHERE() returns Int
Returns an Int representing the memory address of the object.
method WHY
multi method WHY()
Returns the attached Pod value. For instance,
sub cast(Spell $s)
#= Initiate a specified spell normally
#= (do not use for class 7 spells)
{
do-raw-magic($s);
}
say &cast.WHY;
prints
Initiate a specified spell normally (do not use for class 7 spells)
See the documentation specification for details about attaching Pod to variables, classes, functions, methods, etc.
trait is export
multi sub trait_mod:<is>(Mu:U \type, :$export!)
Marks a type as being exported, that is, available to external users.
my class SomeClass is export { }
A user of a module or class automatically gets all the symbols imported that are marked as is export.
See /language/modules#Exporting_and_Selective_Importing for more details.
method take
method take()
Takes the given item and passes it to the enclosing gather block.
#| randomly select numbers for lotto
my $num-selected-numbers = 6;
my $max-lotto-numbers = 49;
gather for ^$num-selected-numbers {
take (1 .. $max-lotto-numbers).pick(1);
}.say; #-> 32 22 1 17 32 9 (for example)
method so
method so()
Returns a Bool value representing the logical non-negation of an expression. One can use this method similarly to the English sentence: "If that is so, then do this thing". For instance,
my @args = <-a -e -b -v>;
my $verbose-selected = any(@args) eq '-v' | '-V';
if $verbose-selected.so {
say "Verbose option detected in arguments";
} #-> Verbose option detected in arguments
method not
method not()
Returns a Bool value representing the logical negation of an expression. Thus it is the opposite of so.
my @args = <-a -e -b>;
my $verbose-selected = any(@args) eq '-v' | '-V';
if $verbose-selected.not {
say "Verbose option not present in arguments";
} #-> Verbose option not present in arguments
Since there is also a prefix version of not, the above code reads better like so:
my @args = <-a -e -b>;
my $verbose-selected = any(@args) eq '-v' | '-V';
if not $verbose-selected {
say "Verbose option not present in arguments";
} #-> Verbose option not present in arguments


Perl 6 Documentation