Lines::Containing - look for lines containing a given needle
# lines with an "a"
.say for lines-containing("foo\nbar\nbaz", "a") # bar␤baz␤
# lines ending on "r", with their line number
.say for lines-containing("foo\nbar\nbaz", / r $/, :kv); # 1␤bar␤
# line numbers of lines starting with "f", starting at 1
.say for lines-containing("foo\nbar", *.starts-with("b"), :k, :offset(1)); # 2␤
Lines::Containing exports a single subroutine
lines-containing that can either take a
Iterator producing lines, an array with lines, a
Map) with lines as values, or any other object that supports a
lines method producing lines (such as
Supply) as the source to check.
As the second parameter, it takes either a
Cool object, a regular expression, or a
Callable as the needle to search for.
It returns a (potentially lazy)
Seq of the lines that contained the needle.
Callable was specified as the second parameter, then the following rules apply:
True, or if
:invert-match is specified, if
Always produce the original line.
Produce whatever was returned by the
Additionally, it supports the following named arguments:
Pairs with the line number (or the key in case of a
Hash) as the key.
Produce line numbers only, or keys only in case of a
Produce line number (or key in case of a
Hash) and line alternately.
Produce lines only.
Ignore case (only if the needle is a
Only produce lines that do NOT match.
Ignore mark (only if the needle is a
Maximum number of matches that will be produced. Defaults to
Any, which indicates that all matches must be produced.
The line number of the first line in the source (defaults to 0).
Elizabeth Mattijsen firstname.lastname@example.org
Source can be located at: https://github.com/lizmat/Lines-Containing . 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 2022 Elizabeth Mattijsen
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.