has-word
NAME
has-word - A quick non-regex word-boundary checker
SYNOPSIS
use has-word;
say has-word("foobarbaz", "foo"); # False
say has-word("foo barbaz", "foo"); # True
say has-word("foo::bar::baz", "bar"); # True
say has-word("foo::bar::baz", "BAZ", :ignorecase); # True
say has-word("foo::bar::báz", "baz", :ignoremark); # True
.say for all-words("foo bar FOO", "foo", :i); # fooFOO
.say for find-all-words("foo bar foo", "foo"); # 08
DESCRIPTION
The has-word module exports a two subroutines that provide
a quick way to see whether a string occurs as a "word" (defined as a number of
alphanumeric characters surrounded by either non-alphanumeric characters or
the beginning or end of the string. As such, it provides the equivalent of
the << word >> functionality in regular expressions, but much faster and
with a simpler way of checking for words that cannot be determined at compile
time.
SUBROUTINES
has-word
say has-word("foobarbaz", "foo"); # False
say has-word("foo barbaz", "foo"); # True
say has-word("foo::bar::baz", "bar"); # True
say has-word("foo::bar::baz", "BAZ", :ignorecase); # True
The has-word subroutine takes the haystack string as the first positional
argument, and the needle string as the second positional argument. It also
optionally takes an :ignorecase (or :i) named argument to perform the
search in a case-insensitive manner, and/or an :ignoremark (or :m) named
argument to perform the search by only comparing the base characters.
It returns either True if found, or False if not.
all-words
.say for all-words("foo bar FOO", "foo", :i); # fooFOO
The all-words subroutine takes the haystack string as the first
positional argument, and the needle string as the second positional
argument. It also optionally takes an :ignorecase (or :i) named
argument to perform the search in a case-insensitive manner, and/or an
:ignoremark (or :m) named argument to perform the search by only
comparing base characters. It returns a Slip with the found strings
(which can be different from the given needle if :ignorecase or
:ignoremark were specified.
find-all-words
.say for find-all-words("foo bar foo", "foo"); # 08
The find-all-words subroutine takes the haystack string as the first
positional argument, and the needle string as the second positional
argument. It also optionally takes an :ignorecase (or :i) named
argument to perform the search in a case-insensitive manner, and/or an
:ignoremark (or :m) named argument to perform the search by only
comparing base characters. It returns a List of positions in the
haystack string where the needle string was found.
SELECTIVE IMPORTING
use has-word <find-all-words>; # only import "find-all-words"
By default all three subroutines are exported. But you can limit this
to the subroutines you actually need by specifying the names in the
use statement.
To prevent name collisions and/or import any subroutine with a more
memorable name, one can use the "original-name:known-as" syntax. A
semi-colon in a specified string indicates the name by which the subroutine
is known in this distribution, followed by the name with which it will be
known in the lexical context in which the use command is executed.
use has-word <has-word:includes>; # import "has-word" as "includes"
say includes "foo bar", "foo"; # True
AUTHOR
Elizabeth Mattijsen <[email protected]>
Source can be located at: https://github.com/lizmat/has-word . Comments and Pull Requests are welcome.
If you like this module, or what I’m doing more generally, committing to a small sponsorship would mean a great deal to me!
COPYRIGHT AND LICENSE
Copyright 2021, 2022, 2024, 2025 Elizabeth Mattijsen
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.
# vim: expandtab shiftwidth=4