Daniel Perrett
and 1 contributors

NAME

Regexp::Flow - flow control for using regular expression

SYNOPSIS

        use Regexp::Flow qw(re_matches re_substitutions);

        ...

        my $m_results =
            re_matches ( $string, $re, $code, $flags );

        my $s_results =
            re_substitutions ( $string, $re, $code, $flags );

        ...

        foreach (@$m_results) {
            print $_->match; # assuming you used the /p flag
        }

        re_matches ( ... ) or warn 'no matches';
        # which is easier than using while, which doesn't allow or/else

FUNCTIONS

re_matches

        my $results = re_matches ( $string, $re, $code, $flags );
        my $results = re_matches ( $string, $re, $flags );
        say $_->prematch for re_matches('1.23', qr/\D/p,''); #?

Finds all instances of $re within string and runs $code each time a match is found. A Regexp:Flow::Result object will be created and passed as the first argument to $code.

If $flags is not present, g will be assumed. If not, you must include it yourself.

If the third argument is a string, it will be used as the flags. Otherwise, it will be executed as a coderef on the Regexp::Flow::Result object, i.e. $code->($rfr)

Within $code, you can call last on $rfr to stop executing $code any more.

Note: Remember you can use any of msixpodual on the regexp and do not need to put these in $flags.

So, for instance, to print $1 the first time it contains a word character you could do:

        my $code = sub {
                my $rr = shift;
                if ($rr->c(1) =~ /\w/) {
                        print $rr->c(1);
                        $rr->last;
                }
        }

        my $string = q{'', 'a', 'b'});

        re_matches ($string, qr/'([^']+)',?/, $code);

The return value of $code is discarded (this may change).

In scalar context, the return value is a Regexp::Flow::Results object (which evaluates to the number of times a match was found, and allows access to each of the results contained within).

In void context, this value is not returned.

In list context, should it return each result?

re_substitutions

        my $results = re_substitutions ( $string, $re, $code, $flags );
        my $results = re_substitutions ( $string, $re, $code );
        my $results = re_substitutions ( $string, $re, $string );
        my $results = re_substitutions ( $string, $re );

Finds all instances of $re within $string and runs $code each time a match is found. A Regexp:Flow::Result object will be created and passed as the first argument to $code. The return value of $code is used as the replacement for the matched string. If a string is passed as the third argument, it ($string) will be the replcement. Therefore do not pass flags as the third argument.

Just like s///, this makes changes to the source string, unless the r flag is present, in which case the source string will be untouched and the return value will be the modified string.

If flags are not provided, g is assumed.

SEE ALSO

Regexp::Result - base class for information about a regexp match

Regexp::Flow::Result - the class available within coderefs above

Regexp::Flow::Results - the list of results returned by functions above

BUGS

Please report any bugs or feature requests to the github issues tracker at https://github.com/pdl/Regexp-Result/issues. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

AUTHORS

Daniel Perrett

LICENSE AND COPYRIGHT

Copyright 2012-2013 Daniel Perrett.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 48:

Deleting unknown formatting code M<>

Around line 55:

Deleting unknown formatting code M<>