In type/Str§

See primary documentation in context for method index

multi method index(Str:D: Cool:D $needle:i(:$ignorecase), :m(:$ignoremark--> Int:D)
multi method index(Str:D: Str:D $needle:i(:$ignorecase), :m(:$ignoremark--> Int:D)
multi method index(Str:D: Cool:D $needleCool:D $pos:i(:$ignorecase), :m(:$ignoremark--> Int:D)
multi method index(Str:D: Str:D $needleInt:D $pos:i(:$ignorecase), :m(:$ignoremark--> Int:D)
multi method index(Str:D: @needles --> Int:D)
multi method index(Str:D: @needles:m(:$ignoremark)! --> Int:D)
multi method index(Str:D: @needles:i(:$ignorecase)!:m(:$ignoremark--> Int:D)

Searches for $needle in the string starting from $pos (if present). It returns the offset into the string where $needle was found, and Nil if it was not found.

Since Rakudo version 2020.02, if the optional named parameter :ignorecase, or :i, is specified, the search for $needle ignores the distinction between upper case, lower case and title case letters. In addition, if the optional named parameter :ignoremark, or :m, is specified, the search for $needle only considers base characters, and ignores additional marks such as combining accents.

Since Rakudo version 2020.05, index accepts a list of needles to search the string with, and return the lowest index found or Nil.


say "Camelia is a butterfly".index("a");         # OUTPUT: «1␤» 
say "Camelia is a butterfly".index("a"2);      # OUTPUT: «6␤» 
say "Camelia is a butterfly".index("er");        # OUTPUT: «17␤» 
say "Camelia is a butterfly".index("Camel");     # OUTPUT: «0␤» 
say "Camelia is a butterfly".index("Onion");     # OUTPUT: «Nil␤» 
say "Camelia is a butterfly".index(<a e i u>);   # OUTPUT: «1␤» 
say "Camelia is a butterfly".index(<a c>:i);   # OUTPUT: «0␤» 
say "Camelia is a butterfly".index(('w''x'));  # OUTPUT: «Nil␤» 
say "Hello, World".index("world");               # OUTPUT: «Nil␤» 
say "Hello, World".index("world":ignorecase);  # OUTPUT: «7␤» 
say "abc".index("ä");                            # OUTPUT: «Nil␤» 
say "abc".index("ä":ignoremark);               # OUTPUT: «0␤» 
say "abc".index("x").defined ?? 'OK' !! 'NOT';   # OUTPUT: «NOT␤»

Other forms of index, including subs, are inherited from Cool.

In type/Cool§

See primary documentation in context for routine index

multi sub index(Cool:D $sCool:D $needle:i(:$ignorecase), :m(:$ignoremark--> Int:D)
multi sub index(Cool:D $sCool:D $needleCool:D $pos:i(:$ignorecase), :m(:$ignoremark--> Int:D)
multi method index(Cool:D: Cool:D $needle --> Int:D)
multi method index(Cool:D: Cool:D $needle:m(:$ignoremark)! --> Int:D)
multi method index(Cool:D: Cool:D $needle:i(:$ignorecase)!:m(:$ignoremark--> Int:D)
multi method index(Cool:D: Cool:D $needleCool:D $pos --> Int:D)
multi method index(Cool:D: Cool:D $needleCool:D $pos:m(:$ignoremark)!  --> Int:D)
multi method index(Cool:D: Cool:D $needleCool:D $pos:i(:$ignorecase)!:m(:$ignoremark--> Int:D)

Coerces the first two arguments (in method form, also counting the invocant) to a Str, and searches for $needle in the string $s starting from $pos. It returns the offset into the string where $needle was found, and Nil if it was not found.

See the documentation in type Str for examples.