Search code examples
arraysregexperlregex-group

How can I store captures from a Perl regular expression into separate variables?


I have a regex:

/abc(def)ghi(jkl)mno(pqr)/igs

How would I capture the results of each parentheses into 3 different variables, one for each parentheses? Right now I using one array to capture all the results, they come out sequential but then I have to parse them and the list could be huge.

@results = ($string =~ /abc(def)ghi(jkl)mno(pqr)/igs);

Solution

  • Your question is a bit ambiguous to me, but I think you want to do something like this:

    my (@first, @second, @third);
    while( my ($first, $second, $third) = $string =~ /abc(def)ghi(jkl)mno(pqr)/igs) {
        push @first, $first;
        push @second, $second;
        push @third, $third;
    }