my @vars; $string =~ /(?{local @1 = ();} (?:( (\d) (?{ local @1 = (@1, $1) }) \w )+ \d\w (?{ @vars = @1 })/x;