NAME

Regex::Object - solves problems with global Regex variables side effects.

VERSION

version 1.11

SYNOPSIS

use Regex::Object;

my $re = Regex::Object->new(regex  => qr/^\w{3}$/); # regex to match 3 letters words

print "matched\n" if $re->match('foo')->success;  # prints matched
print "matched\n" if $re->match('fooz')->success; # nothing

######## ---- ########
# The main goal - both results have different named captured hashes

$re = Regex::Object->new(regex  => qr/(?<name>\w+?) (?<surname>\w+)/); # named captures

my $result1 = $re->match('John Doe');
my $result2 = $re->match('Fill Anselmo');

if ($result2->success) {
    my $name    = $result2->named_captures->{name};
    my $surname = $result2->named_captures->{surname};

    print "Name: $name; Surname: $surname\n";
}

if ($result1->success) {
    my $name    = $result1->named_captures->{name};
    my $surname = $result1->named_captures->{surname};

    print "Name: $name; Surname: $surname\n";
}

######## ---- ########
# Works with match regex

my $re = Regex::Object->new;
my @matches;

while ('John Doe Eric Lide Hans Zimmermann' =~ /(?<name>\w+?) (?<surname>\w+)/g) {
    my $match = $re->collect;
    push @matches, $match;
}

DESCRIPTION

This module was created for one certain goal: give you a level of isolation from perlre global variables.

The Regex::Object supports two approaches:

object scoped regex

qr// regex passed to constructor, so these modifiers could be used: m,s,i,x,xx,p,a,d,l,u,n.

global regex

collecting regex result vars from global match expression, (nothing passed to constructor).

More about Perl Regex: perlre.

Regex::Object METHODS

new(regex => $regex)

my $re = Regex::Object->new(regex  => qr/^\w{3}$/); # scoped qr regex
my $re = Regex::Object->new; # to work with global match expression

Constructor: accept one optional parameter - qr// regex and returns new instance.

regex()

my $regex = $re->regex;

Returns regex that was passed to constructor earlier.

match($string)

my $result = $re->match('foo');

Execute regex matching and returns Regex::Object::Match result DTO.

collect()

$string =~ /(\w*)/
my $result = $re->collect;

Returns Regex::Object::Match result DTO filled with values from the nearest global match expression.

Regex::Object::Match METHODS

success()

my $is_success = $result->success;

Returns 1 if match succeeded or '' if not.

prematch()

Returns string preceding whatever was matched by the last successful pattern match. $` equivalent.

my $prematch = $result->prematch;

match()

Returns string matched by the last successful pattern match. $& equivalent

my $match = $result->match;

postmatch()

Returns string following whatever was matched by the last successful pattern match. $' equivalent.

my $postmatch = $result->postmatch;

last_paren_match()

Returns string matched by the highest used capture group of the last successful search pattern. $+ equivalent.

my $last_paren_match = $result->last_paren_match;

captures()

Returns array ref contains of ($1, $2 ...) capture groups values.

my $first_group = $result->captures->[0];

named_captures()

Returns hash ref of the named captures. %+ equivalent.

my $name = $result->named_captures->{name};

named_captures_all()

Returns hash ref of the named captures all. %- equivalent.

my $names_array_ref = $result->named_captures_all->{name};

BUGS AND LIMITATIONS

If you find one, please let me know.

SOURCE CODE REPOSITORY

https://github.com/AlexP007/regex-object - fork or add pr.

AUTHOR

Alexander Panteleev <alexpan at cpan dot org>.

LICENSE AND COPYRIGHT

This software is copyright (c) 2022 by Alexander Panteleev. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.