regexperlarrays

How can I store regex captures in an array in Perl?


Is it possible to store all matches for a regular expression into an array?

I know I can use ($1,...,$n) = m/expr/g;, but it seems as though that can only be used if you know the number of matches you are looking for. I have tried my @array = m/expr/g;, but that doesn't seem to work.


Solution

  • If you're doing a global match (/g) then the regex in list context will return all of the captured matches. Simply do:

    my @matches = ( $str =~ /pa(tt)ern/g )
    

    This command for example:

    perl -le '@m = ( "foo12gfd2bgbg654" =~ /(\d+)/g ); print for @m'
    

    Gives the output:

    12
    2
    654