in reply to Arbitrary number of captures in a regular expression

You can avoid the nested loop by capturing the repeated elements as a single match and then splitting it:

my @match; while( <DATA> ) { m[^foo ((?:m \d+ )+)] and @match = split '(?<=\d) (?=m)', $1; print "@match"; }

Whether that is in any way 'better' is your call.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."