class Str

String of characters

class Str is Cool does Stringy { }

Built-in class for strings. Objects of type Str are immutable.

Methods

routine chop

multi sub    chop(Str:D)  returns Str:D
multi method chop(Str:D: $chars = 1) returns Str:D

Returns the string with $chars characters removed from the end.

routine chomp

multi sub    chomp(Str:D ) returns Str:D
multi method chomp(Str:D:) returns Str:D

Returns the string with a logical newline removed from the end.

routine lc

multi sub    lc(Str:D ) returns Str:D
multi method lc(Str:D:) returns Str:D

Returns a lower-case version of the string.

routine uc

multi sub    uc(Str:D ) returns Str:D
multi method uc(Str:D:) returns Str:D

Returns an uppercase version of the string.

routine fc

multi sub    fc(Str:D ) returns Str:D
multi method fc(Str:D:) returns Str:D

Does a Unicode "fold case" operation suitable for doing caseless string comparisons. (In general, the returned string is unlikely to be useful for any purpose other than comparison.)

(Not implemented in Rakudo and Niecza)

routine tc

multi sub    tc(Str:D ) returns Str:D
multi method tc(Str:D:) returns Str:D

Does a Unicode "titlecase" operation, that is changes the first character in the string to title case, or to upper case if the character has no title case mapping

(Not implemented in Niecza)

routine tclc

multi sub    tclc(Str:D ) returns Str:D
multi method tclc(Str:D:) returns Str:D

Turns the first character to title case, and all other characters to lower case

(not implemented in Niecza)

routine tcuc

multi sub    tcuc(Str:D ) returns Str:D
multi method tcuc(Str:D:) returns Str:D

Turns the first character to title case, and all other characters to upper case

(Not implemented in Rakudo and Niecza)

routine wordcase

multi sub    wordcase(Cool $x)  returns Str
multi sub    wordcase(Str:D $x) returns Str
multi method wordcase(Str:D: :&filter = &tclc, Mu :$where = True) returns Str

Returns a string in which &filter has been applied to all the words that match $where. By default, this means that the first letter of every word is capitalized, and all the other letters lowercased.

method lcfirst

Perl 6 does not have a lcfirst function.

method ucfirst

Perl 6 does not have a ucfirst function. See tc.

method length

Perl 6 does not have a length function. See chars or elems.

routine chars

multi sub    chars(Cool $x)  returns Int:D
multi sub    chars(Str:D $x) returns Int:D
multi sub    chars(str $x)   returns int
multi method chars(Str:D:)   returns Int:D

Returns the number of characters in the string in the current (lexically scoped) idea of what a normal character is, usually graphemes.

method encode

multi method encode(Str:D: $encoding = $?ENC, $nf = $?NF) returns Buf

Returns a Buf which represents the original string in the given encoding and normal form. The actual return type is as specific as possible, so $str.encode('UTF-8') returns a utf8 object, $str.encode('ISO-8859-1') a buf8.

routine index

multi sub    index(Cool $s, Str:D $needle, Cool $startpos = 0) returns Int
multi method index(Cool $needle, Cool $startpos = 0) returns Int

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.

Examples:

say index "Camelia is a butterfly", "a";     # 1
say index "Camelia is a butterfly", "a", 2;  # 6
say index "Camelia is a butterfly", "er";    # 17
say index "Camelia is a butterfly", "Camel"; # 0
say index "Camelia is a butterfly", "Onion"; # Int()

say index("Camelia is a butterfly", "Onion").defined ?? 'OK' !! 'NOT'; # NOT

routine rindex

multi sub    rindex(Str:D $haystack, Str:D $needle, Int $startpos = $haystack.chars) returns StrPos
multi method rindex(Str:D $haystack: Str:D $needle, Int $startpos = $haystack.chars) returns StrPos

Returns the last position of $needle in $haystack not after $startpos. Returns an undefined value if $needle wasn't found.

Examples:

say rindex "Camelia is a butterfly", "a";     # 11
say rindex "Camelia is a butterfly", "a", 10; # 6

routine split

multi sub    split(  Str:D $delimiter, Str:D $input, $limit = Inf, :$all) returns Positional
multi sub    split(Regex:D $delimiter, Str:D $input, $limit = Inf, :$all) returns Positional
multi method split(Str:D $input:   Str:D $delimiter, $limit = Inf, :$all) returns Positional
multi method split(Str:D $input: Regex:D $delimiter, $limit = Inf, :$all) returns Positional

Splits a string up 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.

If the named parameter :all is passed, the matches from $delimiter are included in the result list.

Note that unlike in Perl 5, empty chunks are not removed from the result list. If you want that behavior, consider using comb instead.

Examples:

say split(';', "a;b;c").perl;          # ("a", "b", "c").list
say split(';', "a;b;c", :all).perl;    # (("a", ";"), ("b", ";"), "c").list
say split(';', "a;b;c", 2).perl;       # ("a", "b;c").list
say split(';', "a;b;c", 2, :all).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

routine comb

multi sub    comb(Str:D   $matcher, Str:D $input, $limit = Inf, Bool :$match)
multi sub    comb(Regex:D $matcher, Str:D $input, $limit = Inf, Bool :$match)
multi method comb(Str:D $input:)
multi method comb(Str:D $input: Str:D   $matcher, $limit = Inf, Bool :$match)
multi method comb(Str:D $input: Regex:D $matcher, $limit = Inf, Bool :$match)

Searches for $matcher in $input and returns a list of all matches (as Str by default, or as Match if $match is True), limited to at most $limit matches.

If no matcher is supplied, a list of characters in the string (e.g. $matcher = rx/./) is returned.

Examples:

comb(/\w/, "a;b;c").perl;        # ("a", "b", "c").list
comb(/\N/, "a;b;c").perl;        # ("a", ";", "b", ";", "c").list
comb(/\w/, "a;b;c", 2).perl;     # ("a", "b").list
comb(/\w\;\w/, "a;b;c", 2).perl; # ("a;b",).list

routine lines

multi sub    lines(Str:D $input, $limit = Inf) returns Positional
multi method lines(Str:D $input: $limit = Inf) returns Positional

Returns a list of lines (without trailing newline characters), i.e. the same as a call to $input.comb( / ^^ \N* /, $limit ) would.

Examples:

lines("a\nb").perl;    # ("a", "b").list
lines("a\nb").elems;   # 2
"a\nb".lines.elems;    # 2
"a\n".lines.elems;     # 1

routine words

multi sub    words(Str:D $input, $limit = Inf) returns Positional
multi method words(Str:D $input: $limit = Inf) returns Positional

Returns a list of non-whitespace bits, i.e. the same as a call to $input.comb( / \S+ /, $limit ) would.

Examples:

"a\nb\n".words.perl;       # ("a", "b").list
"hello world".words.perl;  # ("hello", "world").list
"foo:bar".words.perl;      # ("foo:bar",).list
"foo:bar\tbaz".words.perl; # ("foo:bar", "baz").list

routine flip

multi sub    flip(Str:D ) returns Str:D
multi method flip(Str:D:) returns Str:D

Returns the string reversed character by character.

Examples:

"Perl".flip;  # lreP
"ABBA".flip;  # ABBA

sub sprintf

multi sub sprintf ( Str:D $format, *@args) returns Str:D

This function is mostly identical to the C library sprintf function.

The $format is scanned for % characters. Any % introduces a format token. Format tokens have the following grammar:

grammar Str::SprintfFormat {
 regex format_token { '%': <index>? <precision>? <modifier>? <directive> }
 token index { \d+ '$' }
 token precision { <flags>? <vector>? <precision_count> }
 token flags { <[ \x20 + 0 \# \- ]>+ }
 token precision_count { [ <[1..9]>\d* | '*' ]? [ '.' [ \d* | '*' ] ]? }
 token vector { '*'? v }
 token modifier { < ll l h V q L > }
 token directive { < % c s d u o x e f g X E G b p n i D U O F > }
}

Directives guide the use (if any) of the arguments. When a directive (other than %) is used, it indicates how the next argument passed is to be formatted into the string.

The directives are:

% a literal percent sign
c a character with the given codepoint
s a string
d a signed integer, in decimal
u an unsigned integer, in decimal
o an unsigned integer, in octal
x an unsigned integer, in hexadecimal
e a floating-point number, in scientific notation
f a floating-point number, in fixed decimal notation
g a floating-point number, in %e or %f notation
X like x, but using uppercase letters
E like e, but using an uppercase "E"
G like g, but with an uppercase "E" (if applicable)
b an unsigned integer, in binary

Compatibility:

i a synonym for %d
D a synonym for %ld
U a synonym for %lu
O a synonym for %lo
F a synonym for %f

Perl 5 (non-)compatibility:

n produces a runtime exception
p produces a runtime exception

Modifiers change the meaning of format directives, but are largely no-ops (the semantics are still being determined).

h interpret integer as native "short" (typically int16)
l interpret integer as native "long" (typically int32 or int64)
ll interpret integer as native "long long" (typically int64)
L interpret integer as native "long long" (typically uint64)
q interpret integer as native "quads" (typically int64 or larger)

Examples:

sprintf "%ld a big number, %lld a bigger number\n", 4294967295, 4294967296;

Special case: sprintf("<b>%s</b>\n", "Perl 6") will not work use either of the following:

sprintf Q:b "<b>%s</b>\n",  "Perl 6";
sprintf     "<b>\%s</b>\n", "Perl 6";
sprintf     "<b>%s\</b>\n", "Perl 6";

method subst

multi method subst(Str:D: $matcher, $replacement, *%opts)

Returns the invocant string where $matcher is replaced by $replacement (or the original string, if no match was found).

There is an in-place syntactic variant of subst spelled s/matcher/replacement.

$matcher an be a Regex, or a literal Str. Non-Str matcher arguments of type Cool are coerced to to Str for literal matching.

my $some-string = "Some foo";
my $another-string = $some-string.subst(/foo/, "string"); # gives 'Some string'
$some-string.=subst(/foo/, "string"); # in-place substitution. $some-string is now 'Some string'

The replacement can be a closure:

my $i = 41;
my $str = "The answer is secret.";
my $real-answer = $str.subst(/secret/, {++$i}); # The answer to everything

Here are other examples of usage:

my $str = "Hey foo foo foo";
$str.subst(/foo/, "bar", :g); # global substitution - returns Hey bar bar bar

$str.subst(/foo/, "no subst", :x(0)); # targeted substitution. Number of times to substitute. Returns back unmodified.
$str.subst(/foo/, "bar", :x(1)); #replace just the first occurrence.

$str.subst(/foo/, "bar", :nth(3)); # replace nth match alone. Replaces the third foo. Returns Hey foo foo bar

The following adverbs are supported

short long meaning
:g :global tries to match as often as possible
:nth(Int) only substitute the nth's match
:ss :samespace preserves whitespace on substitution
:ii :samecase preserves case on substitution
:x(Int) substitute exactly $x matches

Note that only in the s/// form :ii implies :i and :ss implies :s. In the method form, the :s and :i modifiers must be added to the regex, not the subst method call.

routine substr

multi sub    substr(Str:D $s, Int:D $from, Int:D $chars = $s.chars - $from) returns Str:D
multi method substr(Str:D $s: Int:D $from, Int:D $chars = $s.chars - $from) returns Str:D

Returns a part of the string, starting from the character with index $from (where the first character has index 0) and with length $chars.

Examples:

substr("Long string", 6, 3);     # tri
substr("Long string", 6);        # tring
substr("Long string", 6, *-1);   # trin
substr("Long string", *-3, *-1); # in

method succ

method succ(Str:D) returns Str:D

Returns the string incremented by one.

String increment is "magical". It searches for the last alphanumeric sequence that is not preceded by a dot, and increments it.

'12.34'.succ      # 13.34
'img001.png'.succ # img002.png

The actual incrementation step works by mapping the last alphanumeric character to a character range it belongs to, and choosing the next character in that range, carrying to the previous letter on overflow.

'aa'.succ   # ab
'az'.succ   # ba
'109'.succ  # 110
'α'.succ    # β
'a9'.succ   # b0

String increment is Unicode-aware, and generally works for scripts where a character can be uniquely classified as belonging to one range of characters.

method pred

method pred(Str:D:) returns Str:D

Returns the string decremented by one.

String decrementing is "magical" just like string increment (see succ). It fails on underflow

'b0'.pred           # a9
'a0'.pred           # Failure
'img002.png'.pred   # img001.png

routine ord

multi sub ord   (Str:D)  returns Int:D
multi method ord(Str:D:) returns Int:D

Returns the codepoint number of the first character of the string

method ords

multi method ords(Str:D:) returns Positional

Returns a list of codepoint numbers, one for each character in the string.

method indent

proto method indent($)
multi method indent(Int $steps where { $_ == 0 } )
multi method indent(Int $steps where { $_ > 0  } )
multi method indent($steps where { .isa(Whatever) || .isa(Int) && $_ < 0 )

Indents each line of the string by $steps, if $steps is positive, or dedents it by -$steps if $steps is negative. if $steps is *, then the string is dedented to the margin:

"  indented by 2 spaces\n    indented even more".indent(*)
    eq "indented by 2 spaces\n  indented even more"

method trim

method trim(Str:D:) returns Str

Remove leading and trailing whitespace. It can be use both as a method on strings and as a function. When used as a method it will return the trimmed string. In order to do in-place trimming, once needs to write .=trim

my $line = '   hello world    ';
say '<' ~ $line.trim ~ '>';        # <hello world>
say '<' ~ trim($line) ~ '>';       # <hello world>
$line.trim;
say '<' ~ $line ~ '>';             # <   hello world    >
$line.=trim;
say '<' ~ $line ~ '>';             # <hello world>

See also trim-trailing and trim-leading

method trim-trailing

Remove the whitespace characters from the end of a string. See also trim.

method trim-leading

Remove the whitespace characters from the beginning of a string. See also trim.

method ACCEPTS

multi method ACCEPTS(Str:D: $other)

Returns True if the string is the same as $other.

Type graph

Below you should see a clickable image showing the type relations for Str that links to the documentation pages for the related types. If not, try the PNG version instead.

perl6-type-graph Str Str Cool Cool Str->Cool Stringy Stringy Str->Stringy Mu Mu Any Any Any->Mu Cool->Any Obsolete Obsolete Obsolete->Str

Routines supplied by class Cool

Str inherits from class Cool, which provides the following methods:

routine abs

method abs()
sub abs(Numeric() $x)

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

method 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

method sqrt()
sub sqrt(Numeric(Cool) $x)

Coerces the invocant to Numeric (or in the sub form, the arguemnt) 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

method 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

method rand()

Coerces the invocant to Num and returns a pseudo-random value between zero and the number.

say 1e5.rand;           # 33128.495184283

routine sin

method sin()
sub sin(Numeric(Cool))

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

sub asin(Numeric(Cool))
method 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

method cos()
sub cos(Numeric(Cool))

Coerces the invocant (or in sub form, the argument) to Numeric, interprets it as radians, returns its sine.

say 0.cos;                  # 1
say pi.cos;                 # -1
say cos(pi/2);              # 6.12323399573677e-17

routine acos

method acos()
sub acos(Numeric(Cool))

Coerces the invocant (or in sub form, the argument) to Numeric, and returns its arc-cosine in radians.

routine tan

method tan()
sub acos(Numeric(Cool))

Coerces the invocant (or in sub form, the argument) to Numeric, interprets it as radians, returns its tangens.

routine atan

method atan()
sub atan(Numeric(Cool))

Coerces the invocant (or in sub form, the argument) to Numeric, and returns its arc-tangens in radians.

routine atan2

method atan2($y = 1e0)
sub atan2(Numeric() $x, Numeric() $y = 1e0)

Coerces the arguments (including the invocant in the method form) to Numeric, and returns their two-argument arc-tangens in radians.

method sec

method sec()
sub sec(Numeric(Cool))

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

method asec()
sub asec(Numeric(Cool))

Coerces the invocant (or in sub form, its argument) to Numeric, and returns its arc-secans in radians.

routine cosec

method cosec()
sub cosec(Numeric(Cool))

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

method acosec()
sub acosec(Numeric(Cool))

Coerces the invocant (or in sub form, its argument) to Numeric, and returns its arc-cosecans in radians.

routine cotan

method cotan()
sub cotangens(Numeric(Cool))

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

method acotan()
sub acotan(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its arc-cotangens in radians.

routine sinh

method sinh()
sub sinh(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its Sine hyperbolicus.

routine asinh

method asinh()
sub asinh(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its Inverse Sine hyperbolicus.

routine cosh

method cosh()
sub cosh(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its Cosine hyperbolicus.

routine acosh

method acosh()
sub acosh(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its Inverse Cosine hyperbolicus.

routine tanh

method tanh()
sub tanh(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its Tangens hyperbolicus.

routine atanh

method atanh()
sub atanh(Numeric(Cool))

Coerces the invocant (or in method form, its argument) to Numeric, and returns its Inverse tangens hyperbolicus.

routine log

multi method log(Cool:D: Cool:D $base?)
multi sub log(Numeric(Cool) $number, Numeric(Cool) $base?)

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

multi method log10()
multi sub log10(Cool(Numeric))

Coerces the invocant (or in the sub form, the invocant) to Numeric, and returns its Logarithm to base 10, that is, a number that approximatly produces the original number when raised to the power of 10.

say log10(1001);                    # 3.00043407747932

method exp

multi method exp(Cool:D: Cool:D $base?)
multi sub exp(Cool:D $pow, Cool:D $base?)

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

multi method round(Cool:D: $unit = 1)
multi sub round(Numeric(Cool))

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

multi method floor
multi sub floor(Numeric(Cool))

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

multi method ceiling
multi sub ceiling(Numeric(Cool))

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

multi method truncate()
multi sub truncate(Numeric(Cool))

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

method ord()
sub ord(Str(Cool))

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

method chr()
sub chr(Int(Cool))

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

method chars()
sub chars(Str(Cool))

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

method codes()
sub codes(Str(Cool))

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

method flip()
sub flip(Str(Cool))

Coerces the invocant (or in sub form, its argument) to Str, and returns a reversed version.

say 421.flip;       # 124

routine trim

method trim()
sub trim(Str(Cool))

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

method trim-leading()
sub trim-leading(Str(Cool))

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

method trim-trailing()
sub trim-trailing(Str(Cool))

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-trailing;
say "<$stripped>";          # <  abc>

routine lc

method lc()
sub lc(Str(Cool))

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

method uc()
sub uc(Str(Cool))

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

method tc()
sub tc(Str(Cool))

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

method tclc()
sub tclc(Str(Cool))

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

method wordcase(:&filter = &tclc, Mu :$where = True)
sub wordcase(Str(Cool) $input, :&filter = &tclc, Mu :$where = True)

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 mather:

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 chop

method chop()
sub chop(Str(Cool))

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

method chomp()
sub chomp(Str(Cool))

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

method substr($from, $chars?)
sub substr(Str(Cool) $str, $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

method ords()
sub ords(Str(Cool) $str)

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

method chrs()
sub chrs(*@codepoints) return Str:D

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

multi method split(  Str:D $delimiter, $limit = Inf, :$all)
multi method split(Regex:D $delimiter, $limit = Inf, :$all)
multi sub    split(  Str:D $delimiter, Str(Cool) $input, $limit = Inf, :$all)
multi sub    split(Regex:D $delimiter, Str(Cool) $input, $limit = Inf, :$all)

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.

If the named parameter :all is passed, the matches from $delimiter are included in the result list.

Note that unlike in Perl 5, empty chunks are not removed from the result list. If you want that behavior, consider using comb instead.

say split(';', "a;b;c").perl;          # ("a", "b", "c").list
say split(';', "a;b;c", :all).perl;    # ("a", ";", "b", ";", "c").list
say split(';', "a;b;c", 2).perl;       # ("a", "b;c").list
say split(';', "a;b;c", 2, :all).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

routine lines

method lines()
sub lines(Str(Cool))

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

method words

method words(Int() $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

multi method comb(Regex $matcher, $limit = *) returns List:D
multi sub comb(Regex $matcher, Str(Cool) $input, $limit = *) returns List:D

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

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

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

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)

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

multi method roots(Int(Cool) $n)
multi sub roots(Numeric(Cool) $x, Int(Cool) $n)

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

method IO() returns IO::Path:D

Coerces the invocant to IO::Path.

.say for '.'.IO.dir;        # gives a directory listing

Routines supplied by class Any

Str inherits from class Any, which provides the following methods:

method ACCEPTS

multi method ACCEPTS(Any:D: Mu $other)

Returns True if $other === self (i.e. it checks object identity).

Many built-in types override this for more specific comparisons

method any

method any() returns Junction:D

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

method all() returns Junction:D

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

method one() returns Junction:D

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

method none() returns Junction:D

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 so 42.list.^name;           # List
say so 42.list.elems;           # 1

method flat

Interprets the invocant as a list, flattens it, and returns that list.

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

Str 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.

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 say

multi method say() returns Bool:D

Prints value to $*OUT after stringification using .gist method with newline at end.

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.